Facebook sdk, Trabalhando com Facebook Query Language (FQL)

Posted on julho 27, 2013. Filed under: Facebook, PHP | Tags:, , |

Introdução

O Facebook, através do FQL, permite consultar dados no Graph API usando um estilo próximo ao conhecido SQL. Neste artigo vamos aprender como executar, elaborar e testar consultas na plataforma do Facebook (FQL) através do SDK para PHP ou Javascript.

Vamos citar alguns exemplos bem interessantes de FQL além de como usar a ferramenta de apoio para desenvolvedores chamada Graph API Explorer disponibilizado pelo facebook para elaborar e testar consultas FQL

  1. Executando FQL através do SDK para PHP e Javascript
  2. Neste tópico vamos aprender como executar uma FQL tanto através do SDK para PHP como pelo SDK para Javascript. Como apoio, vamos usar a seguinte consulta FQL:

    SELECT friend_count FROM user WHERE uid = me()
    (Simplesmente consulta a quantidade de amigos que o usuário do facebook possui)

    Executando através de PHP:

    Exemplo de como executar FQL através do SDK para PHP:

    $result = $facebook->api(array(
    		"method" => "fql.query",
    		"query"  => "SELECT friend_count FROM user WHERE uid = me()",
    ));
    
    if($result) {
    	echo "Quantidade de amigos: {$result[0]['friend_count']}";
    }
    

    Exemplo em PHP, completo funcional:

    Exemplo completo e funcional:
    (Basta apenas parametrizar o appId e secret)

    <?php
    // incluir a lib fo facebook
    require 'facebook-php-sdk-master/src/facebook.php';
    
    // Cria a instancia da aplicacao, informando o appid e o secret
    $facebook = new Facebook(array(
      'appId'  => '',
      'secret' => '',
    ));
    
    // obtem o id do usuario
    $user = $facebook->getUser();
    
    if ($user) { // usuario logado
            try {
    	
            	// Obtem dados do usuario logado
    	        $user_profile = $facebook->api('/me');
    
    			$result = $facebook->api(array(
    				"method" => "fql.query",
    				"query"  => "SELECT friend_count FROM user WHERE uid = me()",
    			));
    	
    			if($result) {
    				echo "Quantidade de amigos: {$result[0]['friend_count']}";
    			}
    
            } catch (FacebookApiException $e) {
                    var_dump($e);
                    $user = null;
            }
    } else {
            // usuario nao logado, solicitar autenticacao
            $loginUrl = $facebook->getLoginUrl();
    		header("Location: $loginUrl");
    }
    

    Executando através de Javascript:

    Exemplo de como executar FQL através do SDK para Javascript:

    FB.api({
        method: 'fql.query',
        query:  'SELECT friend_count FROM user WHERE uid = me()'
    }, function(resp) {
        if (resp.length) {
    		alert(resp[0].friend_count);
        }
    });
    

    Exemplo em Javascript, completo funcional:

    Exemplo completo e funcional:
    (Basta apenas parametrizar o appId)

    <!doctype html>
    <html lang="pt-BR">
    <head>
    	<meta charset="utf-8">
    	<title>Teste App Facebook</title>
    
    	<script src="//connect.facebook.net/pt_BR/all.js"></script>
    	<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    
    <script>
    FB.init({
          appId : '',
          status: true, cookie: false, xfbml: false
    });
    
    
    var FBCountFriends = function() {
    	FB.api({
            	method: 'fql.query',
                   	query:  'SELECT friend_count FROM user WHERE uid = me()'
            }, function(resp) {
            	if (resp.length) {
    				alert(resp[0].friend_count);
                } 
            });
    }
    
    // onload
    jQuery(document).ready(function() {
    
    	FB.getLoginStatus(function(response) {
            	if (response.status === 'connected') {
    				FBCountFriends();
    	        } else {
    				FB.login(function(response) {
    			        	if (response.authResponse) {
    							FBCountFriends();
    				        }
    			    });
    		}
    	})
    });
    </script>
    </head>
    <body>
    </body>
    </html>
    
  3. Testando consultas FQL através do Graph API Explorer
  4. O Facebook disponibiliza uma ferramenta de apoio à desenvolvedores muito útil, chamada Graph API Explorer. Através dela é possível testar e elaborar suas FQLs. Através dessa ferramenta você pode habilitar/desabilitar permissões de forma on-line durante os testes de FQL. Lembrando que o acesso à algumas informações precisam de permissão do usuário para que seu aplicativo possa acessá-las.

    Para testar/debugar suas FQLs, abra o Graph Explorer e clique no botão FQL Query. Antes de inserir/elaborar sua FQL, clique no botão Obter Token de Acesso e selecione as permissões que sua app necessita solicitar para que sua FQL atinja o objetivo de obter as informações que precisa.

    http://developers.facebook.com/tools/explorer
    ScreenShot170

    Em seguida selecione as permissões desejadas. Veja na figura abaixo, que escolhei algumas permissões interessantes para realizar alguns testes bacanas: (email, user_likes, user_photos, user_about_me, user_birthday, user_games_activity).

    Lembre-se que o acesso à algumas informações precisam de determinadas permissões do usuário. Por exemplo, para ter acesso às fotos e álbuns publicadas pelo usuário, você vai precisar que ele aprove a permissão user_photos.

    Para uma referência completa sobre as permissões possíveis, acessar o link:
    http://developers.facebook.com/docs/reference/login/

    ScreenShot171

    Após clicar no botão Get Access Token você já esta apto a testar suas FQLs. Veja exemplo abaixo:

    ScreenShot172

  5. Exemplos interessantes de FQL
  6. Selecionei abaixo alguns exemplos de FQL para que você possa ter uma idéia do que é possível fazer. Dependendo da informação que precisa, aconselho a consultar o link que contém a referência das tabelas existentes para consulta no Graph API ou que procure já a FQL pronta consultando no google. Vamos aos exemplos:

    • Selecionar todos amigos do usuário que estão usando o seu aplicativo:
    • SELECT uid, name FROM user WHERE uid IN(SELECT uid2 FROM friend WHERE uid1 = me()) AND is_app_user = 1
    • Verificando se usuário curtiu determinada fan page:
    • SELECT uid FROM page_fan WHERE page_id = page_id AND uid = me()
      --- trocar page_id pelo id da fanpage
    • Obtendo todas fotos pertencentes ao usuário:
    • SELECT src, caption FROM photo WHERE owner=me()
    • Seleciona o id, nome e foto dos seus amigos, limitando o resultado em 25 registros:
    • SELECT uid, name, pic_square FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me() LIMIT 25)
    • Obtém detalhes dos álbuns do usuário:
    • SELECT aid, owner, name, object_id FROM album WHERE owner=me()
    • Obtém as notificações do usuário que ainda não foram lidas
    • SELECT notification_id, sender_id, app_id, icon_url, title_html, body_html, href 
      FROM notification WHERE recipient_id=me() AND is_unread = 1 AND is_hidden = 0
  7. Limitações de FQL

    Selecionei abaixo algumas limitações presentes no FQL e que normalmente geram dúvidas para desenvolvedores que estão iniciando no desenvolvimento de FQLs:

    • Não é possível criar consultas com JOINs (Um alternativa é utilizar sub-selects)
    • Não é possível Utilizar * : SELECT * (Você tem que especificar todas as colunas que deseja obter da tabela)
    • Não é possível utilizar funções básicas como sum(), count(), etc.

Avançando em seus aplicativos para facecbook

Confira vários outros artigos sobre desenvolvimento para facebook no blog:
Artigos Facebook

Curso rápido e completo sobre desenvolvimento de aplicativos para facebook:
http://www.temporealeventos.com.br/?area=267-Criando-Aplicativos-para-Facebook-Usando-SDK-de-PHP-e-Javascript

Ler Post Completo | Make a Comment ( None so far )

Utilizando Zend Framework 2 no modo StandAlone

Posted on julho 4, 2013. Filed under: PHP, Zend Framework | Tags:, , |

Introdução

O Zend Framework 2 fornece uma API extremamente rica, bem elaborada e bem testada. Possui componentes muito úteis para qualquer projeto de desenvolvimento web.

Neste artigo vamos aprender como configurar o Zend Framework 2 de forma StandAlone. Isso significa que podemos usar os componentes do Zend Framework de forma isolada e independente da estrutura MVC fornecida.

Instalando e Configurando o Ambiente

  1. Download do Zend Framework
  2. Acesse o link http://framework.zend.com/downloads/latest#ZF2 e baixe a última versão disponível para o Zend Framework 2, clicando no botão Download e escolhendo o formato desejado (zip para ambientes windows ou tar.gz para ambientes Linux). Obs: O pacote minimal normalmente é suficiente para a maioria das necessidades.

  3. Descompacte o pacote e grave o caminho completo de instalação
  4. Ao descompactar o pacote do Zend Framework, será criada uma estrutura de diretórios contendo os componentes do framework. Obtenha o caminho completo de instalação, incluindo o subdiretório library/ para podermos setá-lo no include path do php. No meu caso, o caminho completo ficou sendo:
    /home/douglas/ZendFramework-minimal-2.x.x/library/

  5. Configurando o include path e autoloader
  6. Vamos criar um arquivo header.php que deverá ser incluído em todos os seus scripts que utilizarão componentes independentes do Zend Framework 2. Esse arquivo é responsável por configurar o caminho do framework no include path do PHP e por configurar o Auto Loader padrão para as classes presentes no framework da Zend.

    Veja que estamos o componente StandardAutoLoader do próprio Zend Framework. É um autoloder compatível com PSR-0:

    PS: Lembre-se de alterar o caminho especificado na variável $zf2_path de acordo com o caminho da sua instalação:

    <?php
    $zf2_path = '/home/douglas/ZendFramework-minimal-2.x.x/library/';
    set_include_path(get_include_path() . PATH_SEPARATOR . $zf2_path);
    
    require_once($zf2_path . '/Zend/Loader/StandardAutoloader.php');
    $loader = new Zend\Loader\StandardAutoloader(
            array(
                    'namespaces' => array(
                            'Zend' => $zf2_path . '/Zend',
                    ),
                    'fallback_autoloader' => true,
            )
    );
    $loader->register();
    

Exemplos de uso

Neste momento já temos o ambiente pronto para que você possa usar os componentes do Zend Framework2 de forma independente. Basta incluir o arquivo header.php criado anteriormente e instanciar as classes desejadas. Abaixo eu reuni alguns exemplos simples e interessantes. Aconselho você consultar a documentação de referência no próprio site do projeto para mais componentes e para mais detalhes sobre suas utilizações. (Veja o link na área Referências)

Os componentes utilizados no exemplo abaixo foram: Zend\Validator, Zend\Http, Zend\Crypt, Zend\Mail, Zend\Log, Zend\Json e Zend\Filter

<?php
// inclui header zf2 autoload
require_once("header.php");

$validator = new Zend\I18n\Validator\Alnum();
var_dump($validator->isValid('Abcd')); // true
var_dump($validator->isValid('teste??')); // false

// Realizando requisicoes HTTP GET
$request = new Zend\Http\Request();
$request->setUri('http://www.google.com/search?q=php'); // URL traz resultado de busca por PHP
$request->setMethod('GET'); // method

$client = new Zend\Http\Client();
$response = $client->dispatch($request);

$content = $response->getBody(); // corpo do retorno da requisicao
var_dump($content); 

// criptografia
$bcrypt = new Zend\Crypt\Password\Bcrypt;
$str_encrypted = $bcrypt->create('Pasqua Tecnologia');
var_dump($str_encrypted);

var_dump($bcrypt->verify('Pasqua Tecnologia', $str_encrypted)); // true
var_dump($bcrypt->verify('Pasqua', $str_encrypted)); // false

// enviando email
use Zend\Mail;

$mail = new Mail\Message();
$mail->setBody('Corpo do email.');
$mail->setFrom('suporte@dominio-exemplo.org', 'Suporte');
$mail->addTo('douglas.pasqua@gmail.com', 'Douglas V. Pasqua');
$mail->setSubject('Apenas Teste do ZF2 Mail');

$transport = new Mail\Transport\Sendmail();
$transport->send($mail); // envia o email

// logging
$writer = new Zend\Log\Writer\Stream('/tmp/logfile');
$logger = new Zend\Log\Logger();
$logger->addWriter($writer);
$logger->info('Mensagem Informativa'); // grava mensagem no log /tmp/logfile

// JSON
$phpNative = array('nome' => 'Douglas V. Pasqua', 'idade' => 30);

$json = Zend\Json\Json::encode($phpNative);
var_dump($json);

// Filtros
$strtolower = new Zend\Filter\StringToLower;
echo $strtolower('I LOVE ZF2!'); // i love zf2!

Referências

http://framework.zend.com/manual/2.2/en/index.html

Ler Post Completo | Make a Comment ( None so far )

Publicação: Unicode, Os Segredos da Codificação de Caracteres

Posted on julho 4, 2013. Filed under: Palestras, PHP | Tags:, , , |

Segue o acesso aos slides da palestra sobre Unicode, Os Segredos da Codificação de Caracteres: (através do slideshare)

Ler Post Completo | Make a Comment ( 1 so far )

Zend Framework 2: Renderizando uma view diferente do Action padrão do Controller

Posted on maio 29, 2013. Filed under: PHP, Zend Framework | Tags:, , , |

Esta dica é para você que precisa renderizar uma view diferente do action padrão no Zend Framework 2. Você precisara usar a função setTemplate do objeto ViewModel:

public function indexAction()
{
    $view = new ViewModel(array('variable' => $value));
    $view->setTemplate('module/controler/action.phtml'); // caminho para view a ser renderizada
    return $view;
}

Opicionalmente, você pode desabilitar a renderização do layout, usando o método setTerminal:

public function indexAction()
{
    $view = new ViewModel(array('variable' => $value));
    $view->setTerminal(true); // desabilita a renderização do layout
    $view->setTemplate('module/controler/action.phtml'); // caminho para view a ser renderizada
    return $view;
}

Outras dicas para Controllers no Zend Framework 2

Zend Framework 2: Desabilitando a renderização do Layout e View
Zend Framework 2: Retornando dados no formato JSON no Controller
Zend Framework 2: Renderizando a view dentro do Controller
Zend Framework 2: Chamando View Helpers dentro do Controller
Zend Framework 2: Redirecionamento de Rota

Ler Post Completo | Make a Comment ( None so far )

Zend Framework 2: Redirecionamento de Rota

Posted on maio 29, 2013. Filed under: PHP, Zend Framework | Tags:, , , |

Nesta dica temos como realizar o redirecionamento de rotas dentro da camada de Controller no Zend Framework 2. Lembre-se que isso é válido de acordo com as rotas que você tem configurado no arquivo module.config.php do seu módulo.

Redirecionamento simples de rota:

public function indexAction()
{
    return $this->redirect()->toRoute('nome_da_rota'); // redireciona para outra rota configurada no module.config.php
}

Você pode especificar também o action e/ou seus parâmetros:

public function indexAction()
{
    // redireciona para outra rota configurada no module.config.php, espeficando action e parametros
    return $this->redirect()->toRoute('nome_da_rota', array('action' => 'nome_do_action', 'id' => 9999)); 
}

Outras dicas para Controllers no Zend Framework 2

Zend Framework 2: Desabilitando a renderização do Layout e View
Zend Framework 2: Retornando dados no formato JSON no Controller
Zend Framework 2: Renderizando a view dentro do Controller
Zend Framework 2: Chamando View Helpers dentro do Controller
Zend Framework 2: Renderizando uma view diferente do Action padrão do Controller

Ler Post Completo | Make a Comment ( None so far )

Webservices SOAP com Zend Framework 2

Posted on maio 18, 2013. Filed under: PHP, Zend Framework | Tags:, , , , |

Introdução

Neste artigo vamos aprender como criar webservices SOAP com Zend Framework 2. Em artigo anterior, Webservices com Zend Framework parte I, vimos como trabalhar com Webservices SOAP no Zend Framework I. Portanto, este artigo serve com uma atualização do anterior.

O exemplo demonstrado neste artigo utiliza o Zend Framework 2 de forma Standalone, ou seja, de forma independente da estrutura do MVC.

Preparação

Para preparar o ambiente para o Webservice com o Zend Framework 2 de forma Standalone, iremos realizar dois processos: 1) Baixar e descompactar o pacote do Zend Framework. 2) Configurar o autoload do php para que seja possível incluir automaticamente as bibliotecas do Zend Framework necessárias para nosso objetivo.

  1. Baixando e descompactando o Zend Framework
  2. Acesse o link abaixo e faça o download do pacote Zend Framework 2.x.x Minimal:

    http://framework.zend.com/downloads/latest
    PS: Não há necessidade de baixar o pacote pelo site da Zend. Pode baixar pelo link direto. (.tar.gz ou .zip)

    Descompacte o pacote dentro do diretório onde irá criar seu webservice SOAP (server ou client) e faça um link (ou copie) o diretório library/Zend para o diretório corrente. Veja exemplo de como fazer no Linux:

    $ tar zxpf ZendFramework-minimal-2.x.x.tgz
    $ ln -s ./ZendFramework-minimal-2.x.x/library/Zend
    

    PS: Outra opção é colocar o caminho completo para o diretório ZendFramework-minimal-2.x.x/library/Zend dentro do include path do php

  3. Configurando o autoload
  4. É necessário registrarmos no autoload do PHP a lógica para que nosso script possa incluir automaticamente todas as libs do Zend Framework necessárias. Esse procedimento irá nos poupar o trabalho de ter que incluir manualmente todos os arquivos necessários, que é uma opção muito custosa.

    Crie um arquivo chamado autoload-zend.php, com o seguinte conteúdo:

    <?php
    // auto load compativel com zend framework
    spl_autoload_register(function ($className) {
    
          // We assume classes with underscores are Zend Framework pseudo namespaced classes
          if (strpos($className, '_' ) !== FALSE) {
                $className = str_replace('_', '/', $className );
          }
    
          // This line provides real php 5.3 namespace support
          $file = str_replace('\\', '/', $className . '.php');
    
          // search include path for the file.
          $include_dirs = explode(PATH_SEPARATOR, get_include_path());
    
          foreach($include_dirs as $dir) {
            $full_file = $dir . '/'. $file;
    
            if (file_exists($full_file)) {
                require_once $full_file;
                return true;
            }
          }
    
          return false;
    });
    
  5. Criando o Webservice SOAP
  6. Para criar nosso Webservice SOAP, vamos utilizar a classe Zend\Soap\Server e Zend\Soap\AutoDiscover. A classe Zend\Soap\AutoDiscover será utilizada para geração automática do WSDL necessário para a comunicação do protocolo SOAP. É possível trabalhar no PHP no modo non-WSDL, sem a utilização do WSDL. Porém é uma pratica não aconselhada, pois a maioria dos Webservices SOAP em outras linguagens não permite o modo non-WSDL. A classe Zend\Soap\Server é responsável por gerenciar o Webservice em si.

    Segue abaixo o código do Webservice SOAP de exemplo (Server):
    No nosso exemplo, o webservice estará servindo a funcionalidade de um calculadora básica: soma e subtração

    Arquivo soap-server.php

    <?php
    // incluir o autoload para o zf2
    require_once("autoload-zend.php");
    
    if (isset($_GET['wsdl'])) {
            // geracao automatica do WSDL
            $autodiscover = new Zend\Soap\AutoDiscover();
            $autodiscover->setUri('http://127.0.0.1/services/soap-server.php');
    
            // servindo a classe Calculadora
            $autodiscover->setClass('Calculadora');
            $autodiscover->handle();
    } else {
            // instancia do Soao Server
            $soap = new Zend\Soap\Server("http://127.0.0.1/services/soap-server.php?wsdl");
    
            // servindo a classe Calculadora
            $soap->setClass('Calculadora');
            $soap->handle();
            exit;
    }
    
    /*
     * Classe calculadora
     */
    class Calculadora {
    
            /**
             * Realiza Soma
             * @param integer $a
             * @param integer $b
             * @return integer
             */
            public function soma($a, $b) {
                    return $a + $b;
            }
    
            /**
             * Realiza Subtracao
             * @param integer $a
             * @param integer $b
             * @return integer
             */
            public function subtrai($a, $b) {
                    return $a - $b;
            }
    }
    

    Considerações:

    • Lembre-se de modificar a URL onde seu webservice esta acessível. Trocando http://127.0.0.1/services/soap-server.php pela URL correta de acordo com o seu ambiente.
    • Preste atenção nos comentários utilizados nos métodos da classe Calculadora. Eles são utilizados para ajudar o Zend\Soap\AutoDiscover na criação do WSDL. Lembre-se de ajustá-los de acordo com os tipos de dados manipulados pelos métodos do seu webservice.
  7. Criando o Webservice Cliente
  8. Vamos demonstrar como criar o webservice cliente para consumir o webservice anterior usando as classes do Zend Framework 2. Segue abaixo a implementação do cliente do webservice usando a classe Zend\Soap\Client:

    Arquivo soap-client.php

    <?php
    // incluir o autoload para o zf2
    require_once("autoload-zend.php");
    
    // canal de comunicacao com o webservice, apontar para a URL do WSDL
    $soap = new Zend\Soap\Client("http://127.0.0.1/services/soap-server.php?wsdl");
    
    // utilizando as funcoes do webservice
    echo $soap->soma(5, 5) . "<br />"; // 10
    echo $soap->subtrai(100, 50) . "<br />"; // 50
    
  9. Referências
  10. Neste artigo foi abordado a essência da criação de Webservices SOAP com Zend Framework 2. Para se aprofundar mais no assunto, segue links da documentação oficial do Zend Framework 2 referente a Webservices SOAP:

    http://framework.zend.com/manual/2.0/en/modules/zend.soap.server.html
    http://framework.zend.com/manual/2.0/en/modules/zend.soap.client.html
    http://framework.zend.com/manual/2.0/en/modules/zend.soap.auto-discovery.html

    Caso queira uma introdução bem feita sobre a arquitetura do protocolo SOAP:

    http://www.w3schools.com/soap/default.asp

Ler Post Completo | Make a Comment ( 3 so far )

Zend Framework 2: Criando View Helpers para formatação de CPF e CNPJ

Posted on maio 4, 2013. Filed under: PHP, Zend Framework | Tags:, , , |

Introdução

Neste artigo demonstro a criação de View Helpers para formatação de CPF e CNPJ no Zend Framework 2. Segue abaixo os códigos prontos para uso. Tenha um bom proveito.

View Helper para formatar CPF

Segue abaixo o View Helper para formatação de CPF:

<?php
// module/Application/src/Application/View/Helper/FormataCPF.php
namespace Application\View\Helper;
use Zend\View\Helper\AbstractHelper;

class FormataCPF extends AbstractHelper
{
	public function __invoke($cpf)
	{
		// limpar tudo que não for digito
		$cpf = preg_replace('/[^0-9]/', '', trim($cpf));
		if(strlen($cpf) != 11) {
			// quantidade de numeros inválidos para cpf
			return null;
		}
		
		// formatar cpf
		$cpf_formatado = substr($cpf, 0, 3) . '.';
		$cpf_formatado .= substr($cpf, 3, 3) . '.';
		$cpf_formatado .= substr($cpf, 6, 3) . '-';
		$cpf_formatado .= substr($cpf, 9, 3);
		return $cpf_formatado;
	}
}

View Helper para Formatar CNPJ

Segue abaixo o View Helper para formatação de CNPJ:

// module/Application/src/Application/View/Helper/FormataCNPJ.php
<?php
namespace Application\View\Helper;
use Zend\View\Helper\AbstractHelper;

class FormataCNPJ extends AbstractHelper
{
	public function __invoke($cnpj)
	{
		$cnpj = preg_replace('/[^0-9]/', '', trim($cnpj));
		if(strlen($cnpj) != 14) {
			// quantidade de numeros inválidos para cnpj
			return null;
		}
		
		$cnpj_formatado = substr($cnpj, 0, 2) . '.';
		$cnpj_formatado .= substr($cnpj, 2, 3) . '.';
		$cnpj_formatado .= substr($cnpj, 5, 3) . '/';
		$cnpj_formatado .= substr($cnpj, 8, 4) . '-';
		$cnpj_formatado .= substr($cnpj, 12, 2);
		return $cnpj_formatado;
	}
}

View Helper para formatar CPF e CNPJ juntos

Segue o View Helper abaixo para caso você queira utilizar apenas um View Helper para formatar tanto CPF quanto CNPJ. O código diferencia o CPF do CNPJ pela quantidade de dígitos: 11 dígitos é CPF. 14 dígitos é CNPJ:

<?php
// module/Application/src/Application/View/Helper/FormataCPFouCNPJ.php
namespace Application\View\Helper;
use Zend\View\Helper\AbstractHelper;

class FormataCPFouCNPJ extends AbstractHelper
{
	public function __invoke($numero)
	{
		// limpar tudo que não for digito 
		$numero = preg_replace('/[^0-9]/', '', trim($numero));
		if(strlen($numero) == 11) {
			// formata cpf
			$cpf_formatado = substr($numero, 0, 3) . '.';
			$cpf_formatado .= substr($numero, 3, 3) . '.';
			$cpf_formatado .= substr($numero, 6, 3) . '-';
			$cpf_formatado .= substr($numero, 9, 3);
			return $cpf_formatado;
						
		} else if(strlen($numero) == 14) {
			// formata cnpj
			$cnpj_formatado = substr($numero, 0, 2) . '.';
			$cnpj_formatado .= substr($numero, 2, 3) . '.';
			$cnpj_formatado .= substr($numero, 5, 3) . '/';
			$cnpj_formatado .= substr($numero, 8, 4) . '-';
			$cnpj_formatado .= substr($numero, 12, 2);
			return $cnpj_formatado;
		} else {
			// quantidade de numeros inválidos para cpf ou cnpj
			return null;
		}
	}
}

Configurando o Module.php

Não esqueça de instanciar os View Helpers criados no arquivo Module.php:

// module/Application/Module.php
public function getViewHelperConfig()
{
	return array(	
			'invokables' => array (
					'formataCPF' => new View\Helper\FormataCPF(),
					'formataCNPJ' => new View\Helper\FormataCNPJ(),
					'formataCPFouCNPJ' => new View\Helper\FormataCPFouCNPJ(),
			),
	);
}

Usando os View Helpers na camada de View

<ul>
	<!--  usando formataCPF  -->
	<li>CPF: <?php echo $this->formataCPF('99999999999'); // formatando CPF?></li>

	<!--  usando formataCNPJ  -->
	<li>CNPJ: <?php echo $this->formataCNPJ('99999999999999'); // formatando CNPJ ?></li>

	<!--  usando formataCPFouCNPJ  -->
	<li>CPF: <?php echo $this->formataCPFouCNPJ('99999999999'); // formatando CPF?></li>
	<li>CNPJ: <?php echo $this->formataCPFouCNPJ('99999999999999'); // formatando CNPJ ?></li>	
	
</ul>

PS: Observe que você pode passar o número CPF/CNPJ já formatado para as funções criadas acima. A função já faz o tratamento de remover todos caracteres que não forem dígitos antes de realizar a formatação devida.

Resultado:

ScreenShot110

Ler Post Completo | Make a Comment ( None so far )

Zend Framework 2: Retornando dados no formato JSON no Controller

Posted on abril 30, 2013. Filed under: PHP, Zend Framework | Tags:, , |

O Zend Framework 2 disponibiliza uma forma simples de retornar dados no formato JSON na camada de View. Basta usar a classe JsonModel no lugar de ViewModel no action do seu Controller. Para utilizar essa funcionalidade, primeiro é necessário habilitar o JsonStrategy dentro do arquivo module.config.php referente ao seu módulo. Veja como fazer abaixo:

// arquivo module.config.php
'view_manager' => array(
		'display_not_found_reason' => true,
		'display_exceptions'       => true,
		'doctype'                  => 'HTML5',
		'not_found_template'       => 'error/404',
		'exception_template'       => 'error/index',
		'template_map' => array(
				'layout/layout'           => __DIR__ . '/../view/layout/layout.phtml',
				'application/index/index' => __DIR__ . '/../view/application/index/index.phtml',
				'error/404'               => __DIR__ . '/../view/error/404.phtml',
				'error/index'             => __DIR__ . '/../view/error/index.phtml',
		),
		'template_path_stack' => array(
				__DIR__ . '/../view',
		),
		'strategies' => array(
				'ViewJsonStrategy',
		),
),

Para gerar um conteúdo no formato JSON, basta retornar uma instância da classe JsonModel. Veja exemplo abaixo:

namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Zend\View\Model\JsonModel;

class IndexController extends AbstractActionController
{
	public function indexAction()
	{
		return new JsonModel(array(
				'nome' => 'Douglas V. Pasqua',
				'email' => 'blablabla@bla.xyz',
		));
	}
}

Ao acessar o action, a saída gerada seria:

{"nome":"Douglas V. Pasqua","email":"blablabla@bla.xyz"}

Outras dicas para Controllers no Zend Framework 2

Zend Framework 2: Desabilitando a renderização do Layout e View
Zend Framework 2: Renderizando a view dentro do Controller
Zend Framework 2: Chamando View Helpers dentro do Controller
Zend Framework 2: Redirecionamento de Rota
Zend Framework 2: Renderizando uma view diferente do Action padrão do Controller

Ler Post Completo | Make a Comment ( None so far )

Zend Framework 2: Desabilitando a renderização do Layout e View

Posted on abril 30, 2013. Filed under: PHP, Zend Framework | Tags:, , |

  • Desabilitando a renderização de Layout e View (Ambos)
  • Desabilitar a renderização do Layout e View é bem simples. Veja abaixo:

    namespace Application\Controller;
    
    use Zend\Mvc\Controller\AbstractActionController;
    
    class IndexController extends AbstractActionController
    {
    	public function indexAction()
    	{	
    	     echo "texto qualquer";   
    	     return $this->response;
    	}
    }
    
    
  • Desabilitando somente a renderização do Layout
  • Segue exemplo abaixo caso queira desabilitar somente a renderização do Layout, mas manter a renderização da view:

    namespace Application\Controller;
    
    use Zend\Mvc\Controller\AbstractActionController;
    use Zend\View\Model\ViewModel;
    
    class IndexController extends AbstractActionController
    {
    	public function indexAction()
    	{	
    		$view_params = array(); // parametros passados para a view
    		$viewModel = new ViewModel($view_params);
    		$viewModel->setTerminal(true); // desabilita a renderizacao do layout
    		return $viewModel;
    	}
    }
    

Outras dicas para Controllers no Zend Framework 2

Zend Framework 2: Renderizando a view dentro do Controller
Zend Framework 2: Retornando dados no formato JSON no Controller
Zend Framework 2: Chamando View Helpers dentro do Controller
Zend Framework 2: Redirecionamento de Rota
Zend Framework 2: Renderizando uma view diferente do Action padrão do Controller

Ler Post Completo | Make a Comment ( None so far )

Zend Framework 2: Renderizando a view dentro do Controller

Posted on abril 30, 2013. Filed under: PHP, Zend Framework | Tags:, , |

Renderizar a View dentro do Controller pode ser útil caso desejamos retornar a view renderizada em algum outro formato que não seja o padrão. A view renderizada será retornada para dentro de uma variável. Dessa forma podemos retornar o conteúdo da view para um requisição ajax por exemplo. Veja abaixo como fazer:

namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;

class IndexController extends AbstractActionController
{
	public function indexAction()
	{
		$view_params = array (
				'nome' => 'Douglas V. Pasqua',
		);
		
		$viewModel = new ViewModel($view_params);
		$viewModel->setTemplate('application/index/index.phtml'); // caminho para o template que será renderizado
		$html = $this->getServiceLocator()->get('ViewRenderer')->render($viewModel);
				
		// enviar conteudo de $html via ajax
	}
}

Outras dicas para Controllers no Zend Framework 2

Zend Framework 2: Desabilitando a renderização do Layout e View
Zend Framework 2: Retornando dados no formato JSON no Controller
Zend Framework 2: Chamando View Helpers dentro do Controller
Zend Framework 2: Redirecionamento de Rota
Zend Framework 2: Renderizando uma view diferente do Action padrão do Controller

Ler Post Completo | Make a Comment ( None so far )

« Entradas Anteriores

Liked it here?
Why not try sites on the blogroll...

%d blogueiros gostam disto: