Back-End

23 mar, 2011

Mais que “hello world” com Zend Framework

Publicidade

No artigo anterior, falamos sobre como criar um projeto com zend framework, mostrando que existem diversas formas de se criar essa estrutura de projeto. Além disso, vimos que o Zend permite ainda que se utilize diferentes estruturas de diretórios para se adequar melhor às suas necessidades. Se baixou o arquivo compactado do projeto, talvez tenha reparado que ele continha alguns arquivos a mais do que os explicados no artigo anterior.

Esses arquivos formam o conjunto de controllers e views que representam as camadas de regras de negócio e apresentação respectivamente. São eles que, juntamente com o models, formam sua verdadeira aplicação. Os arquivos incluídos juntamente com o arquivo compactado são criados automaticamente, quando você cria um projeto usando Zend Tools ou Zend Studio e representam o controllers e views principais e de erro.

Na prática o que acontece é que, quando alguém realiza uma requisição ao endereço web onde está sua aplicação, será levado ao arquivo index.php, pois todas as chamadas aos diretórios foram redefinidas pelo arquivo .htaccess. O arquivo index.php irá direcionar essa aplicação para a ação correta do controlador correto, de acordo com os dados encontrados na requisição, e se não encontrar qualquer um dos dois, irá direcionar para a ação padrão do controlador padrão, que, caso nada tenha sido alterado é indexAction doIndexController.

Por exemplo, uma requisição a http://meusitecomzendframework.com.br será direcionada a indexAction doIndexController. Já uma requisição a http://meusitecomzendframework.com.br/artigo será direcionada a indexAction do ArtigoController (pois o controller foi definido mas a ação não), da mesma forma uma requisição a http://meusitecomzendframework.com.br/artigo/editar será direcionado a editarAction doArtigoController (pois ambos foram definidos).

Voltando ao projeto criado anteriormente, se vocês acessarem o caminho referente a esse projeto no seu navegador sem passar nenhum outro parâmetro, poderão visualizar uma página do Zend Framework mostrando que tudo está funcionando corretamente (figura acima).

Agora, se acrescentarem /artigo ao final da URL, verão uma página de erro dizendo que o ArtigoController não foi encontrado. Isso acontece mesmo, pois todas as requisições que não podem ser respondidas são direcionadas para o ErrorController, que contém algumas regras de negócios para exibição dos erros ocorridos na página.

Agora vamos entender como tudo isso acontece. Acessando a url do seu projeto sem nenhum parâmetro, fará com que sua requisição seja direcionada para o arquivo index.php, que verificará que nenhum parâmetro foi passado e conseqüentemente direcionará a requisição para a indexAction do IndexController.

Abrindo o arquivo IndexController.php dentro da pasta controllers, você poderá encontrar dois métodos: o métodoinit(), que inicia o controlador, e tudo que for incluído nele será executado caso qualquer ação daquele controlador seja chamada; e o método indexAction que é o método que estamos buscando, mas ele está vazio (provavelmente somente com um comentário), então como aquela página (acima) é exibida.

Ou seja, ao final de todas as ações dos controladores um outro arquivo, com o mesmo nome da ação com a extensão.phtml, localizada em um diretório com o mesmo nome do controlador (ambos sem os sufixos) dentro do diretório ../application/views/scripts é chamado automaticamente. Essa é a view referente ação index do controlador index, portando estará disponível em ../application/views/scripts/index/index.phtml e nesse arquivo estará contido todo o código HTML que será exibido quando essa requisição for feita.

Algumas convenções

Por padrão, no Zend Framework, quando se utiliza a estrutura de diretórios recomendada, todos os controladores deverão ser arquivo terminados com o sufixo Controller localizados dentro do diretório../application/controllers/, grafados com a primeira letra em maiúsculo, e a palavra Controller também com a primeira letra em maiúsculo, e com a extensão .php., por exemplo, IndexController.phpArtigoController.phpou FaleconoscoController.php e deverão conter uma classe com o mesmo nome do arquivo grafada da mesma forma que extenda a classe Zend_Controller_Action

As nomes das ações dos controladores deverão terminar com o sufixo Action (com A maiúsculo) e serem grafadas em minúsculo. Cada ação do controlador irá chamar um arquivo com o mesmo nome da ação e extenção .phtml localizada em um diretório com o mesmo nome do controlador dentro do diretório../application/views/scripts/

No começo pode parecer um pouco complicado demais, mas todas essas convenções irão ajudar muito a organizar os arquivos quando o projeto começar a crescer.

Criando sua primeira página

Para criar a primeira página vamos alterar o conteúdo do arquivo IndexController.php inserindo dentro do método indexAction o seguinte código:

    public function indexAction()
{
$this->view->titulo = 'Projeto Hello World';
$this->view->texto = 'Hello World';
}

Essas duas linhas simples estão armazenando duas variáveis, título e texto com seus valores e enviando essas variáveis à view respectiva dessa ação. Dessa forma iremos também substituir o conteúdo do arquivo../application/views/scripts/index/index.phtml pelo seguinte:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
<title><?php echo $this->titulo;?></title>
</head>
<body>
<p><?php echo $this->texto;?></p>
</body>
</html>

Repare que é um arquivo XHTML simples, que contém apenas dois itens que merecem destaque. Dentro da tag<title> está inserida uma instrução para imprimir o valor da variável $this->titulo e dentro da tag <body> uma outra instrução para imprimir o valor da variável $this->texto. Essas foram as duas variáveis criadas na ação do controlador e passadas para a view, sendo assim qualquer variável criada daquela forma no controller pode ser acessada na view dessa forma.

Agora, acessando novamente o caminho da sua aplicação você verá uma página com o texto “Hello World” e com o título Hello World. Pode parecer muito trabalho para pouca coisa, mas dessa forma você separou todas as regras de negócio da sua aplicação (código PHP) da sua apresentação (código HTML). Numa aplicação maior que “Hello World”, isso pode diminuir significativamente o trabalho que terá para encontrar trechos de código procurados, e realizar as mudanças que precisa na sua aplicação, além de deixar o código muito mais limpo e organizado.

Um pouco mais

Aplicações não são feitas somente de texto e códigos HTML e PHP, e por isso precisamos armazenar nossos arquivos estáticos em algum lugar que possa ser acessado pela aplicação de forma natural. E como fazemos isso? 

Quando criamos nosso arquivo .htacces, no artigo anterior eu disse que aquelas linhas de código direcionariam todas as requisições feitas à aplicação para o arquivo index.php, exceto se essa requisição fosse direcionada para um arquivo válido e existente dentro do diretório public. Pois é exatamente nesse diretório que devem estar todos os arquivos estáticos que você irá usar na sua aplicação (imagens, folhas de estilo, scripts, audio, video, etc). Agora basta referenciar esses arquivos com caminhos relativos ao arquivoindex.php, r você pode criar quantos diretórios quiser para organizar os arquivos estáticos dentro da pasta public.

O mesmo acontece com os links internos da nossa aplicação, todos eles deverão ser relativos ao arquivo index.php. Dessa forma não importa em qual controller ou ação você estiver, todos os links e caminhos de arquivos serão relativos à um mesmo local, facilitando muito o trabalho com links e arquivos.

Agora vamos tentar… 

Copiem um arquivo de imagem qualquer para dentro do diretório public (no caso estou usando um arquivo chamado zend.jpg). Agora, adcionem a seguinte marcação HTML ao seu arquivo../application/views/scripts/index.phtml dentro do <body>:

<img src="zend.jpg" alt="Zend Framework" />

Se você acessar novamente sua aplicação pelo navegador perceberá que a imagem foi exibida corretamente. Caso você enfrente qualquer problema com os caminhos relativos, aos arquivos na sua aplicação, poderá forçar os caminhos a serem relativos ao seu arquivo index.php inserindo a seguinte instrução no <head> do seu HTML:

<base href="<?php echo Zend_Controller_Front::getInstance()->getBaseUrl();?>" />

Essa instrução é uma instrução HTML simples, que diz que todos os caminhos da sua página devem ter como base o valor retornado pelo comando em PHP, que será a URL base da sua aplicação.

Conclusão

Os dois artigos sobre Zend Framework mostram os primeiros passos para se construir uma aplicação usando o framework. Mas você pode conseguir muito mais utilizando-o. Com certeza sua aplicação se tornará muito mais fácil e rápida de ser desenvolvida e mantida. Além disso, você ainda terá à sua mão uma vasta coleção de bibliotecas para auxiliá-lo nas mais diversas necessidades da sua aplicação, como acesso a dados; autenticação e controle de acesso; geração de pdf’s; conexão com aplicações externas e muito mais. 

Você pode baixar os arquivos alterados nesse tutorial. Você fará o download de um arquivo compactado contendo toda a estrutura de diretórios do Zend Framework criado no artigo anterior, juntamente com as modificações realizadas nesse artigo. Caso utilize esses arquivos ainda será necessário copiar a pasta Zendpara dentro do diretório library que não foi incluída com esse arquivo.

Até a próxima!