Zend Framework Tutorial Series - Capítulo 2
No primeiro capítulo desta série eu mostrei como configurar o seu ambiente de desenvolvimento para utilizar o Zend Framework com o Zend_Tool.
- A camada de modelo é onde nós implementamos a lógica de negócios, acesso a tabelas e banco de dados e a manipulação direta (INSERT, UPDATE, DELETE) desses dados.
- A camada de visão é aquela onde nós recebemos informação fornecida pelo usuário e também onde nós mostramos informações ao usuário proveniente da camada de modelo por exemplo.
- A camada de controle é a camada que nós usamos para unir os dados das duas camadas citadas anteriormente. Por exemplo: No controller nós podemos trabalhar com dados provenientes do modelo, prepara-lo e em seguida passa-los para a view que apresentará estas informações ao usuário; Nós podemos também por meio do controller, receber informações da camada de visão e passa-las à camada de modelo. Eu costumo dizer que esta camada trabalha como uma espécie de atravessador.
O MVC com Zend FrameworkEu prefiro mostrar como este padrão é implementado no Zend Framework na prática pois este é meu jeito e é isso que pretendo fazer neste tutorial, então, neste capítulo, sempre que eu for trabalhar com uma das camadas eu vou deixar isso bem explícito.Será implementado algum projeto neste Tutorial?Sim e como já existem vários tutoriais por aí que implementam Blog, Agenda, etc, nós implementaremos um sistema básico de contas a pagar utilizando o SQLite como SGBD.
- Entender o conceito de MVC aplicado ao Zend Framework.
- Criar Controllers, Actions e Views usando Zend Framework.
- form_incluir_usuario.php -> Form de inclusão de usuários
- incluir_usuario.php -> Incluir usuário
- form_alterar_usuario.php -> Form de alteração de usuários
- alterar_usuario.php -> Alterar usuário
- excluir_usuario.php -> Excluir usuário
- listar_usuarios.php -> Listar usuários
- formAction -> Tela com formulário para inclusão e alteração de dados de usuário
- saveAction -> Realiza os procedimentos necessários para salvar um usuário
- deleteAction -> Exclui usuário
- indexAction -> Tela padrão que neste caso mostrará a listagem de usuários cadastrados.
<?php
class IndexController extends Zend_Controller_Action{
public function init(){/* Initialize action controller here */}
public function indexAction(){// action body}}
A primeira coisa que observamos é que o nome da classe é exatamente igual ao nome do arquivo (excluíndo o sufixo .php) e isso é uma regra.
Como vimos anteriormente, actions podem (e são na maioria dos casos) se relacionar a telas do nosso projeto, para isso nós temos que ter uma view template correspondente para que possa ser renderizada e apresentada na tela para o usuário.
Criando o UsersController
zf create controller users
Após executar este comando, o resultado será parecido com o trecho abaixo:
Creating a controller at /usr/local/zend/apache2/htdocs/zf-series/application/controllers/UsersController.phpCreating an index action method in controller UsersCreating a view script for the index action method at /usr/local/zend/apache2/htdocs/zf-series/application/views/scripts/users/index.phtmlCreating a controller test file at /usr/local/zend/apache2/htdocs/zf-series/tests/application/controllers/UsersControllerTest.phpUpdating project profile '/usr/local/zend/apache2/htdocs/zf-series/.zfproject.xml'
Pronto! Nosso novo controller está criado, o nome dele é UsersController.php e ele também implementou para nós o indexAction e seu template. Dê uma olhada nos diretórios para você ver a mágica.
Como exercício, edite o arquivo de template index.phtml que está em application/views/scripts/users e coloque uma frase que te agrade lá. O meu ficou assim:
<?php
class UsersController extends Zend_Controller_Action{
public function init(){/* Initialize action controller here */}
public function indexAction(){// action body$this->view->minhaFrase = "Os programadores são a Elite da TI";}}
<br /><br /><center><?php echo $this->minhaFrase ?></center>
Pronto. Como nós estamos acessando o objeto diretamente da view, então basta manipularmos o atributo minhaFrase que criamos quando estávamos no controller diretamente usando $this.
zf enable layout
Layouts have been enabled, and a default layout created at /usr/local/zend/apache2/htdocs/zf-series/application/layouts/scripts/layout.phtmlA layout entry has been added to the application config file.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Zend Framework Tutorial Series</title>
<meta name="generator" content="TextMate http://macromates.com/">
<meta name="author" content="Adler Medrado">
<!-- Date: 2010-02-15 -->
</head>
<body>
<div id="header">
<h1>Zend Framework Tutorial Series</h1>
</div>
<div id="content">
<p>Este é o layout do nosso sistema. Em breve nós iremos modifica-lo.</p>
<?php echo $this->layout()->content; ?>
</div>
<div id="footer">
<p>© 2010 - Adler Medrado - http://adlermedrado.com.br</p>
</div>
</body>
</html>
Considerações Finais
Abraços e até o próximo capítulo.
15 comments
Parabéns!
Caboco rasgado é outra coisa! kkkkkkkk
Só o ouro man!!!!!!!!!!!!!!!!!
Continue assim ajudando a comunidade com boas infos
Abraço do brother carioca
Thiago Toledo - PHPRio
Parabéns pela iniciativa e qualidade do material. Pessoalmente acho o seu tutorial bem mais agradável de ler do que o QuickStart da Zend.
Acompanhando suas instruções obtive um problema, no entanto. Ao tentar executar o comando "% zf enable layout" eu recebo a mensagem "Action 'enable' is not a valid action".
Não estou certo o que causou esse problema, você teria alguma idéia? Tentei googlear o problema mas não obtive sucesso.
De qualquer forma, fica aqui um workaround, caso alguém se depare com o mesmo problema, para não perder o embalo do tutorial:
1) dentro do seu projeto, procure pelo arquivo application/configs/application.ini e abra-o no editor de sua preferência;
2) você vai encontrar alguns blocos delimitados por nomes entre colchetes (ex.: [staging:production]). Adicione a seguinte linha dentro do bloco [production]:
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
3) Crie o diretório "/layouts/scripts" dentro do diretório "application" de seu projeto;
4) Dentro do diretório "application/layouts/scripts", crie o arquivo "layout.phtml" e continue o tutorial do Adler.
Creio que o comando "zf enable layout" faça exatamente isso para você.
Enfim, era isso.
[]s
Rodrigo
O problema está no Zend Framework que vem com o Zen Server CE. Basta dar download do último Zend Framework e substituí-lo na pasta apropriada.
[]s
Rodrigo
Um abraço
Sobre seu problema, eu ia exatamente te perguntar qual era a versão do Zend Framework que você estava usando. De qualquer forma o bom é que você descobriu rapidamente.
Espero que você esteja aproveitando o tutorial.
Grande abraço.
Gostaria de uma ajuda sua, no index.phtml coloquei a seguinte linha:
<center><?php echo $this->minhaFrase ?></center>
Porém, aparece a mensagem: "Fatal error: Using $this when not in object context in C:\xampp\htdocs\sistemas\zf_teste\application\views\scripts\users\index.phtml on line 2"
Fui verificar o arquivo UsersController e ao abri-lo aparece a seguinte mensagem:
"Fatal error: Class 'Zend_Controller_Action' not found in C:\xampp\htdocs\sistemas\zf_teste\application\controllers\IndexController.php on line 3"
Pelo jeito o Zend não está sendo carregado, segui todos os passos do seu tutorial, o que pode estar errado?
Obrigado pela ajuda
D:\projetosWeb\Zen\bin>zf create controller usuario
An Error Has Occurred
A project profile was not found.
Zend Framework Command Line Console Tool v1.9.6
Details for action "Create" and provider "Controller"
Controller
zf create controller name index-action-included[=1] module
e uma coisa podeira usar o mysql em vez do sqlite, pq o mysql e melho.
Cara, uma dica: estude bem, mas muito bem o primeiro tutorial. E não se prenda somente aos tutoriais aqui, são excelentes tutoriais, porém são tutoriais de certa forma avançados.
Abraço.




Estou acompanhado vc em todos os seu artigos pois vale a pena.