Archive for maio \29\-02:00 2013

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 )

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

%d blogueiros gostam disto: