Você está na página 1de 8

Zend Framework para iniciantes (parte 1)

Estrutura de diretórios

Vou explicar aqui a forma que utilizo para estruturar os diretórios da minha aplicação, todas as normas que sigo são
da própria zend.

Descompacte o arquivo e copie a pasta library para um diretório acima do seu diretório web. Posso exemplificar
assim: quando faço login na locaweb, é listado alguns diretórios e a pasta public_html essa é a o diretório web, então
colocarei a pasta library na raiz da minha conta(um nivel acima do diretório web).

Na pasta acima do diretório web é criado também a seguinte estrutura de diretório:

Application/
—-Configs/
—-Controllers/
—-Layouts/
—-Models/
—-Views/
—-Bootstrap.php
Library
—–Zend/* -> library zend
Public_html -> meu diretório web
—–Index.php
—–.htaccess
—–images/
—–css/
—–swf/
—–js/

Configurações iniciais

Vamos as primeiras configurações. entraremos no index.php para definir alguns caminhos:

view source
print?
01 <?php
02 // Definindo algumas constantes

03 defined('APPLICATION_PATH')
04 || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

05 defined('ROOT_PATH')
06 || define('ROOT_PATH', realpath(dirname(__FILE__) . '/../'));

07 defined('PUBLIC_PATH')
08 || define('PUBLIC_PATH', realpath(dirname(__FILE__) . '/'));

09
10 // Define o nivel da aplicação.

11 defined('APPLICATION_ENV')
12 || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));

13
14 // Aqui são os include paths muito importante configuralos corretamente

15 set_include_path(implode(PATH_SEPARATOR, array(
16 realpath(APPLICATION_PATH), //inclui o diretório da aplicação

17 realpath(APPLICATION_PATH . '/../library'), //inclui o diretório da library


18 realpath(APPLICATION_PATH . '/models'), //inclui o diretório dos models dentro das aplications

19 get_include_path(), //inclui os demais includes paths já pre definidos


20 )));

21
22 /* Zend_Application */

23 require_once 'Zend/Application.php';
24 ########## INICIO DOS REQUIRES ################

25 require_once "Zend/Loader/Autoloader.php";
26 ########## FINAL DOS REQUIRES ################

27 try{
28 /*

Essa predefinição é muito importante pois ela nos permite utilizar um recurso bem legal, não precisamos mais
29
utilizar require, require_once ou include em nossos objetos desde que sigamos uma estrutura de NameSpaces.
30 Ver mais detalhes em: http://www.marcosborges.com/blog/?page_id=132#NameSpace

31 */
32 $loader = Zend_Loader_Autoloader::getInstance()->setFallbackAutoloader(true);

33 // Cria a aplicação, inicia e roda


34 $application = new Zend_Application(

35 APPLICATION_ENV,
36 APPLICATION_PATH . '/Configs/Application.ini'

37 );
38 $application->bootstrap()

39 ->run();
40 }catch(Exception $e){

41 Zend_Debug::dump($e);
42 }

43 ?>

Agora precisamos criar o arquivo de configuração da aplicação esse é o arquivo que passamos na linha 36 do
index.php.

Criaremos esse arquivo dentro da pasta Application/Configs com no nome de Application.ini

view source
print?
01 [production]
02 includePaths.library = APPLICATION_PATH "/../library"

03 bootstrap.path = APPLICATION_PATH "/Bootstrap.php"


04 bootstrap.class = "Bootstrap"

05 resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"


06 resources.layout.layoutPath = APPLICATION_PATH "/layouts"

07 phpSettings.display_startup_errors = 0
08 phpSettings.display_errors = 0

09
10 [staging : production]

11 phpSettings.display_startup_errors = 0
12 phpSettings.display_errors = 0

13
14 [testing : production]

15 phpSettings.display_startup_errors = 1
16 phpSettings.display_errors = 1

17
18 [development : production]

19 phpSettings.display_startup_errors = 1
20 phpSettings.display_errors = 1

Um pouco sobe o arquivo de configuração: esse arquivo define para a aplicação itens como onde está a classe de
bootstrap (é a primeira classe a ser executada pelo framework), o local onde então os controllers, o arquivo do layout
e variaveis do php como display_erros que s estiver 0 (zero) nenhum erro é exibido para o usuário.

As tags entre [] são referêntes ao estágio do projeto e quando existem dois nomes separados por “:” é que o primeiro
herda os dados já definidos no segundo. No arquivo acima não preciso definir tudo o que é definido na tag
[production] pois todas que estiverem [ .... : production] herdaram os valores nela definidos.

Precisamos criar o arquivo de responsável pelo boot da aplicação, na linha 3 do arquivo de configuração definimos
onde vai ficar esse arquivo. Criaremos ele na pasta Application com o nome de Bootstrap.php

view source
print?
1 <?php
2 class Bootstrap extends Zend_Application_Bootstrap_Bootstrap

3{
4 public function _init(){

5
6 }

7}
Utilizamos essa classe normalmente para inicializar os componentes como plugins, bibliotecas de tradução, alteração
das rotas default, mais pra frente postarei diversos materiais falando a respeito.

Agora configuraremos o arquivo .htaccess, esse arquivo é responsável por definir em que ambiente estamos rodando
a aplicação (desenvolvimento, teste e produção) e também configuraremos as rewrite rules.

view source
print?
01 SetEnv APPLICATION_ENV development
02 #SetEnv APPLICATION_ENV production

03
04 AddDefaultCharset utf-8

05
06 RewriteEngine On

07 RewriteCond %{REQUEST_FILENAME} -s [OR]


08 RewriteCond %{REQUEST_FILENAME} -l [OR]

09 RewriteCond %{REQUEST_FILENAME} -d
10 RewriteRule ^.*$ - [NC,L]

11 RewriteRule ^.*$ index.php [NC,L]

Agora com o ambiente já está configurado é hora de criar os controllers e views e ver alguma coisa rodando.

Layout, Controllers, Actions e Views

Começaremos criando o Layout na pasta Application/Layouts com nome de layout.phtml. Note que na linha 6 do
arquivo de configuração na primeira parte do tutorial, definimos o local onde vai ficar o arquivo do layout.

view source
print?
1 <!-- layout.phtml -->
2 <html>

3 <head>
4 <title>Meu primeiro teste com a zend framework.</title>

5 </head>
6 <body>

7 <?php echo $this->layout()->content ?>


8 </body>

9 </html>

Na linha 6 note que imprimimos uma propriedade chamada content retornado pelo método layout, é nesse local que
será incluído a view referente a action executada.

Agora criaremos o IndexController.php, que é o controlador padrão na pasta Aplication/Controllers.


view source
print?
01 <?php
02 class IndexController extends Zend_Controller_Action

03 {
04

05 public function init()


06 {

07 /* Initialize action controller here */


08 }

09
10 public function indexAction()

11 {
12 $this->view->assign("titulo", "Meu titulo");

13 $this->view->assign("conteudo", "Conteúdo de teste");


14

15 }
16

17 public function enviarAction()


18 {

19 // verifica se a requisição é um post equivalente a $_SERVER['REQUEST_METHOD'] == "post"


20 if($this->_request->isPost()){

21 // equivalente ao var_dump do $_REQUEST


22 Zend_Debug::dump($this->_request->getParams());

23 }
24 }

25
26 }?>

No arquivo acima temos 3 métodos, o init é executado automaticamente logo que a aplicação instância a o controller,
o indexAction é chamado quando não existe o parametro que especifica a action a ser executada, o método
enviarAction será executado quando o parametro enviar for passado.

Para cada Action criada é necessário também criar um template mais conhecido como view. No nosso caso
precisamos de dois templates, um para o index e outro para enviar. Para isso criaremos uma pasta com o nome do
controller, dentro de Application/Views/Scripts então teremos a seguinte estrutura, Application/Views/Scripts/Index,
dentro desta pasta criaremos primeiro a view da action index com nome de index.phtml e enviar.phtml para a action
enviar.

view source
print?
01 <!-- index.phtml -->
02 <h2><? echo $this->titulo; ?></h2>

03 <? echo $this->conteudo; ?><br>


04 <form action="<? echo $this->url(array("controller"=>"index","action"=>"enviar")); ?>" method="POST">

05 <label>Nome:<br />
06 <input type="text" name="nome" value="" />

07 </label><br />
08 <label>Email:<br />

09 <input type="text" name="email" value="" />


10 </label><br />

11 <input type="submit" name="enviar" value="enviar" />


12 </form>
view source
print?
1 <!-- enviar.phtml -->
2 <h2>Dados recebidos</h2>

3 <? foreach($this->dados as $k => $v){ ?>


4 <strong><? echo $k; ?></strong>: <? echo $v; ?><br />

5 <? } ?>
<br
6
/>

7 <a href="<? echo $this->url(array("controller"=>"index","action"=>"index")); ?>">voltar</a>

Agora é só abrir o browser e testar, o que você tem que visualizar é um titulo, conteúdo e um formulário, preencha
esse formulário, note que vai ser enviado para a action enviar, essa action irá imprimir todos os dados passados pelo
formulário.

Models, Helpers e Plugins

Nessa terceira para, veremos os models, os helpers e os plugins. Esses são objetos mais relacionados a inteligência da
aplicação.

Models

Utilizo os models para obter e tratar dados apartir de uma base de dados, arquivos ou mesmo outros models. Por
recomendação da zend seus models devem ser criados na pasta Application/Models. Ao criar os models utilize a
seguinte estrutura para o nome de sua classe, para garantir que a mesma será carregada automaticamente pelo
autoloader, como definimos no index.php linha 32.

Caso sua classe estiver logo baixo da pasta models nomeie o arquivo com o mesmo nome da classe:

Ex: Application/Models/Post.php

view source
print?
1 <?
2 class Post{

3 public $posts = null;


4 public function __construct(){

5
6}

7}

Caso deseje organizar mais fundo seus models, precisa prefixar o nome da sua classe com o nome do diretório mais
“_” (underline).

Ex: Application/Models/Blog/Post.php

view source
print?
1 <?
2 class Blog_Post{

3 public $posts = null;


4 public function __construct(){

5
6}

7}

Helper’s

Existem dois tipos de helpers, temos os helpers de views, que garantem acesso direto a um metódo do helper apartir
do proprio objeto view e o helper de action que fornece acesso através de propriedade _helper do objeto action.

Criando

Primeiro o da view, em Application/Views/Helpers/FormatCurrency.php

view source
print?
01 <?
02 class Zend_View_Helper_FomartCurrency extends Zend_View_Helper_Abstract

03 {
04 public $view;

05 public function fomartCurrency($value) {


$currency = new
06
Zend_Currency("pt_BR");

07 return $currency->toCurrency($value);
08 }

09 public function setView(Zend_View_Interface $view) {


10 $this->view = $view;
11 }
12 }

13
14 ?>

obs: O nome da classe tem que conter o prefixo: Zend_View_Helper_ e deve extender a classe
Zend_View_Helper_Abstract. O nome do metódo a ser acessado é igual ao nome da sua classe sem o prefixo e
iniciado em minúsculo.

Agora vamos fazer o helper da Action em: Application/Helpers/Login.php.

view source
print?
01 <?
02 class Zend_Controller_Action_Helper_Login extends Zend_Controller_Action_Helper_Abstract {

03 public $pluginLoader;
04 public function __construct() {

05 $this->pluginLoader = new Zend_Loader_PluginLoader ( );


06 }

07
08 public function isLogin(){

09 if(!isset($_SESSION['LOGIN']) || is_null($_SESSION['LOGIN'] || empty($_SESSION['LOGIN']))){


10 return true;

11 }else{
12 return false;

13 }
14 }

15
16 public function direct() {

17 // TODO Auto-generated 'direct' method


18 return $this->isLogin();

19 }
20 }

21 ?>

obs: Como o helper de view esse helper precisa ser prefixado de Zend_Controller_Action_Helper e extender a classe
Zend_Controller_Action_Abstract, seu metódo direct é chamado toda vez que utilizamos o helper como metódo.

Você também pode gostar