quinta-feira, 4 de dezembro de 2014

Php CodeSniffer validando seu estilo de código PHP no Eclipse

Quando comecei a programar em 2008 não tinha nenhuma preocupação com o estilo de escrita dos meus códigos, se funcionassem já era uma grande vitória. Só que conforme você vai aprendendo e se aprimorando, chega um momento em que ter um código "funcionando" já não é mais o suficiente, você começa a se preocupar com padrões, estilos, etc.
Como tenho como hábito utilizar o CakePHP foi natural começar a seguir suas regras estilo de codificação (http://book.cakephp.org/2.0/pt/contributing/cakephp-coding-conventions.html).
Para mim estava tudo bem, seguia o estilo do CakePHP e estava satisfeito, mas nunca me preocupei em validar, checar se meus códigos realmente estavam seguindo o estilo corretamente.
O tempo passou mais um pouco e dois artigos me fizeram ver que podia melhorar um pouco mais:
http://br.phptherightway.com/#guia_de_estilo_de_codigo
http://www.fititnt.org/padrao/php-psr.html
No segundo artigo mencionado acima, conheci o PHP CodeSniffer que pode ser instalado como um plugin do Eclipse e com mais um pouco de pesquisa, encontrei um pacote de regras do CakePHP para ser usado no CodeSniffer.


Preparando o Terreno

Para começar, precisamos do Eclipse instalado e configurado para uso com projetos PHP. Tenho um artigo explicando isso em http://linuxnomicro.blogspot.com.br/2014/03/utilizando-o-cakephp-no-eclipse.html. Nesse tutorial usei o Ubuntu 12.04 com o Eclipse Kleper, como troquei de notebook, preparei este novo tutorial com o Ubuntu 14.04 e a nova versão do Eclipse "Luna" já com o plugin PDT instalado http://www.eclipse.org/downloads/packages/eclipse-php-developers/lunasr.
Também temos que instalar o PHP-PEAR que vai baixar o pacote de estilos do CakePHP. Abrindo o gnome-terminal execute o comando:
$ sudo apt-get install php-pear


Instalando o Plugin Php_CodeSniffer no Eclipse

O plugin responsável por habilitar o CodeSniffer para o Eclipse é o PHP Toll Integration (PTI) mantido pelo PHPsrc.
Começamos abrindo a janela de instalação de plugins do Eclipse:
Eclipse - Install New Software
Em seguida adicionamos o repositório PTI http://www.phpsrc.org/eclipse/pti/
Eclipse add pti
  Com o repositório PTI adicionado, marcamos a instalação do PHP CodeSniffer e a PHP PEARLibrary.
Install Pear Library e CodeSniffer
Bom, agora é next, aceitar os termos e aguardar. No final o Eclipse  vai pedir um restart.

Instalando o CakePHP_CodeSniffer e habilitando no PHP_CodeSniffer do Eclipse 

O plugin CodeSniffer do Eclipse já traz alguns pacotes de estilos instalados, nada nos impede de baixar o pacote  do CakePHP_CodeSniffer manualmente e acrescentar dentro da pasta do plugin, mas vou optar por mostrar a instalação seguindo o descrito no site do projeto  http://pear.cakephp.org/ e depois cobfigurar o PEAR no Eclipse. Então, vamos abrir o terminal e seguir os passos indicados:
1. Registrar o canal
$ sudo pear channel-discover pear.cakephp.org
2.  Listar os pacotes disponíveis
$ sudo pear remote-list -c cakephp
3. Instalar
$ sudo pear install cakephp/CakePHP_CodeSniffer
Se der tudo certo, você vai receber a mensagem install:ok no terminal.
CakePHP_CodeSniffer instalado


Bom, agora vamos configurar alterar o PEAR no Eclipse para carregar o CakePHP_CodeSniffer. No Eclipse em Window - Preferences - PEAR clique em New.
PEAR Install Escolha o diretório onde o PEAR está instalado, no Ubuntu fica em /usr/share/php.
/usr/share/php
 Depois, é só aplicar.
PEAR - Apply
 Para que o CodeSniffer funcione no Eclipse, você indicar também onde o seu PHP client está instalado. No Ubuntu /usr/bin/php5.
/usr/bin/php5

Para terminar troque o PEAR interno do plugin CodeSniffer pelo PEAR que você acabou de configurar, aproveite para marcar também o executável do PHP, se não o CodeSniffer não vai funcionar dentro do Eclipse.
Configurar PEAR e PHP no plugin

É isso, está feito.
Vejam um exemplo em funcionamento. Criei um método chamado test() e deixei alguns erros: não indiquei o retorno do método na documentação e o CodeSniffer marcou um alerta(amarelo) e não usei o nome da variável new_Test corretamente e recebi uma marca de erro (vermelho).
PHP CodeSniffer em funcionamento











quarta-feira, 2 de abril de 2014

Instalando o TCPDF no CakePHP 2.4

Existe várias formas de gerar arquivos PDF no PHP, uma delas é através do TCPDF. Neste artigo vou explicar como instalar o TCPDF no CakePHP 2.4. Como exemplo, vamos partir da instalação do Cake explicado em  Utilizando o CakePHP no Eclipse.

Após a instalação do Cake 2.4.6, estamos então com esta página:
CakePHP Instalado

O TCPDF pode ser baixado em http://sourceforge.net/projects/tcpdf/files/, a versão que está sendo usada neste artigo é a 6.0.062.
Depois do download, descompactamos o arquivo e copiamos a pasta tcpdf para app/Vendor em nosso aplicativo.
app/Vendor/tcpdf

Para que os navegadores reconheçam que o arquivo gerado deva ser tratado como um PDF, escolhendo o tipo de aplicação correto,  vamos criar um layout em app/View/Layouts/pdf.ctp.
Página pdf.ctp

Para este teste vamos criar um arquivo em app/Controller chamado EtiquetasController.php e criar dois métodos:
EtiquetasController

Agora as views para os métodos em app/View/Etiquetas
app/View/Etiquetas

Em index.ctp, só precisamos de um link para a página viewPdf.

Bom, agora vamos criar nosso PDF. 
No método viewPdf() temos que indicar o layout e chamar a renderização da página.

  public function viewPdf() {
    $this->layout = 'pdf';
   $this->render();
 }       
 

E na view, carregamos o TCPDF e montamos o arquivo:
<?php 
App::import('Vendor','tcpdf/tcpdf'); 

//carrega o construtor do pdf
$Pdf = new TCPDF();

$Pdf->setPrintHeader(false);

$Pdf->setPrintFooter(false);

$Pdf->SetMargins(10, 20, 0);

$Pdf->AddPage('P','A4');

$html = '
 <h1> PDF gerado pelo TCPDF</h1>
 <p>As configurações para cabeçalho e rodapé foram zeradas</p>';

$Pdf->writeHTML($html);

echo $Pdf->Output('etiqueta.pdf','I'); 

Neste exemplo, antes de adicionar uma nova página, desabilito o cabeçalho e rodapé padrão do TCPDF. E o resultado:

Na página do TCPDF há uma vasta documentação e exemplos de uso.

segunda-feira, 10 de março de 2014

Utilizando o CakePHP no Eclipse

Introdução

Sempre utilizei o Gedit ou o Geany (quando estou no Windows) para para criar e editar meus arquivos do CakePHP, bem... às vezes começo meus os arquivos com o bake (disponível no CakePHP via terminal) que gera a estrutura básica, e até pouco tempo não pensava em trabalhar de outra forma.
Mas depois de usar o Eclipse num curso de Java da Universidade XTI fiquei com vontade de experimentcom PHP, mas especificamente com o CakePHP.
O sistema e aplicativos usados neste tutorial são os seguintes:

  • Ubuntu 12.04 (32 bits)
  • Apache 2.0
  • PHP 5.3.10
  • java 1.7.0_51
  • PostgreSQL 9.1.12
  • CakePHP 2.4.6
  • Eclipse Standard 4.3.2
   

Instalando o CakePHP e configurando um app básico 

Para começar, vamos baixar o cakePHP daqui https://github.com/cakephp/cakephp/tags, descompactar e copiar o diretório para a raiz do servidor e dar permissões de escrita para o diretório app/tmp. Neste teste o diretório do cake foi renomeado para cakephp-test, ao carregar a página temos uma tela como a abaixo:
  
Meste ponto o cakePHP está funcionando, mas dá para melhorar algumas coisas antes de continuar. Para começar, vamos criar um banco de dados "cakephp_test", usando o phppgadmin.

Agora, através do bake podemos arrumar as pendências da tela acima:

A opção [P]roject faz os ajustes necessários no app/Config/core.php
Com a opção [D]atabase Configuration configuramos o banco de dados

Vejam que agora ficou bem melhor, só ficou faltando ativar o DebugKit, mas não faz diferença neste teste.

Instalando o Eclipse e o Plugin PDT

O Eclipse Standard 4.3.2 (Kleper) pode ser baixado em https://www.eclipse.org/downloads/, a instalação é simples, basta descompactar o arquivo baixado.

A instalação do Plugin PDT para gerenciar projetos PHP também não é complexa, já que o plugin está disponível no próprio repositório do Kleper.
Depois é só clicar em Next, concordar com os termos de serviço e, após instalação do plugin, reiniciar o Eclipse.

Para testar os recursos do PDT, podemos criar um projeto no Eclipse utilizando diretório onde instalamos o CakePHP.



 E aí está...
 O PDT já está trabalhando a nosso favor, métodos do controller estão sendo reconhecidos e a função autocompletar do Eclipse funcionando.

Podemos também experimentar a geração automática de documentação. É só começar digitar /** e clicar em Enter. 

Completando os reconhecimento do CakePHP

Mais duas coisas ainda precisam ser feitas para valer a pena o uso do Cake no Eclipse:

Fazer com que o Eclipse reconheça os arquivos .ctp como código PHP



Adicionar os arquivos *.ctp aos tipos de conteúdo PHP é o suficiente. Vejam o arquivo Layouts/default.ctp

2º Fazer com que o Eclipse reconheça os helpers do CakePHP nas views. Vejam que nada acontece se começarmos escrever um link ($this->Html->link) no cabeçalho da página default.ctp.
A solução neste caso é criar um arquivo que mapeie o Helpers usados no nosso projeto, dentro do diretório app/View. Encontrei o código abaixo no bakery que funcionou de primeira.
Arquivo: app/View/helper_complete.php

<?php
App::uses('AppHelper''Helper'); /** 
 * this Helper
 *
 * @property Html $Html
 * @property Session $Session
 * @property Form $Form
 */
class this extends AppHelper {
    var 
$Html;
    var 
$Session;
    var 
$Form;
    
    public function 
__contruct()
    {
        
$this->Html = new HtmlHelper($View);
        
$this->Session = new SessionHelper($View);        
        
$this->Form = new FormHelper($View);        
    }
}
$this = new this(); ?>

Conforme nosso projeto cresça e passemos a utilizar outros Helpers, é só ir atualizando este arquivo.

Bom, é isto. Podemos até usar o navegador do Eclipse para ver o código rodando.