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).
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
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
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);
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.
view source
print?
01 [production]
02 includePaths.library = APPLICATION_PATH "/../library"
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
09 RewriteCond %{REQUEST_FILENAME} -d
10 RewriteRule ^.*$ - [NC,L]
Agora com o ambiente já está configurado é hora de criar os controllers e views e ver alguma coisa rodando.
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>
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.
03 {
04
09
10 public function indexAction()
11 {
12 $this->view->assign("titulo", "Meu titulo");
15 }
16
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>
05 <label>Nome:<br />
06 <input type="text" name="nome" value="" />
07 </label><br />
08 <label>Email:<br />
5 <? } ?>
<br
6
/>
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.
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{
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{
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
view source
print?
01 <?
02 class Zend_View_Helper_FomartCurrency extends Zend_View_Helper_Abstract
03 {
04 public $view;
07 return $currency->toCurrency($value);
08 }
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.
view source
print?
01 <?
02 class Zend_Controller_Action_Helper_Login extends Zend_Controller_Action_Helper_Abstract {
03 public $pluginLoader;
04 public function __construct() {
07
08 public function isLogin(){
11 }else{
12 return false;
13 }
14 }
15
16 public function direct() {
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.