Академический Документы
Профессиональный Документы
Культура Документы
Download ZF1.11
http://framework.zend.com/releases/ZendFramework-1.11.0/ZendFramework-1.11.0.zip
Descompacte em um diretrio da sua preferncia Adicione o diretrio que contm a pasta Zend na diretiva include_path do arquivo php.ini. Alternativa 1: Cole a pasta dentro do diretrio library do seu projeto Alternativa 2: Crie um link simblico na pasta library do seu projeto para a pasta Zend
Copie os arquivos zf.php e zf.sh (ou zf.bat no Windows) para um diretrio no caminho de busca do sistema operacional (no Linux, /usr/bin) (S para Linux) Renomeie o zf.sh para zf e torne-o executvel (sudo chmod a+x zf)
Voc pode automatizar a execuo dos comandos do Zend_Tool, programando botes ou menus em um IDE, como o Eclipse, para chamlos.
Isso pode variar amplamente para cada sistema operacional e verso, assim voc est realmente por conta prpria nesta parte. Configure o diretrio public do seu diretrio {projectname} como DocumentRoot. Depois de reiniciar o Apache, voc deve ser capaz de ir ao site que voc configurou e ver a pgina padro do Zend Framework!
Tcharam!
Alternativa
Voc pode copiar o arquivo .htaccess do diretrio public para a raiz do projeto. Criar uma varivel contendo a base URL
Definir uma constante com o valor dessa varivel Configurar o Controlador Frontal no application.ini
Includo pelo tradutor
define('BASE_URL',$baseUrl);
resources.frontController.baseUrl = BASE_URL
Geralmente ns temos o domnio configurado para apontar diretamente para o diretrio public
Isso evita que o cdigo PHP seja acessvel diretamente Nenhum arquivo php deve ficar na pasta public a menos que seja simples e o framework pea por isso
A exceo o index.php
Estrutura de Diretrios
/application
arquivos da aplicao arquivos do framework ( /library/Zend ) Classes e bibliotecas extras usadas pela aplicao index.php, html/js/images/etc, qualquer coisa que deva ser diretamente acessvel pelo navegador testes unitrios
/library
/public
/tests
Diretrio Application
Bootstrap.php
Configurao do framework especfica para a aplicao Arquivo .ini da aplicao Contm as classes controladores de pgina Contm as classes que modelam os dados Voc est convidado a adivinhar o que vai aqui Errado, no so classes, so simples arquivos php+html.
configs
controllers
models
views
index.php
Prepara o include path Especifica a configurao da aplicao Carrega e roda o bootstrap
CREATE TABLE `user` ( `user_id` INT NOT NULL AUTO_INCREMENT , `username` VARCHAR( 255 ) NOT NULL , `email` VARCHAR( 128 ) NOT NULL , `password` VARCHAR( 32 ) NOT NULL , `salt` VARCHAR( 32 ) NOT NULL , `api_key` VARCHAR( 32 ) NOT NULL , `api_secret` VARCHAR( 32 ) NOT NULL , `user_type` TINYINT NOT NULL , PRIMARY KEY ( `user_id` ), UNIQUE KEY `username` (`username`) )
# Database resources.db.adapter = "pdo_mysql" resources.db.params.host = "localhost" resources.db.params.username = "zfclass" resources.db.params.password = "zfclass" resources.db.params.dbname = "zfclass_{yourname}" resources.db.isDefaultTableAdapter = true
application.ini
Production, Staging, Development Isso pode ser definido no arquivo .htaccess Essas sees podem ser usadas para especificar diferentes bancos de dados para diferentes ambientes
Configurando o layout
O que um layout?
Um modo em 2 passos de prover um layout global para sua aplicao A viso resultar em html que ser colocado como contedo no layout Layout pode hospedar links dinmicos para cabealho javascript, css, etc Facilmente acessvel e controlvel pelo controlador ou viso.
Layout (Continuao)
Crie os diretrios application/layouts e application/layouts/scripts Adicione as seguintes linhas ao seu arquivo application.ini:
Layouts em Mdulos
Estamos fazendo um mdulo administrativo Vamos carregar um layout especfico para ele
application/plugins/ModuleLayout.php
class Plugin_ModuleLayout extends Zend_Controller_Plugin_Abstract { public function preDispatch(Zend_Controller_Request_Abstract $request) { $module = strtolower($request->getParam('module')); $layout = Zend_Layout::getMvcInstance(); if ($layout->getMvcEnabled()) { switch($module) { case 'default': break; default: $layout->setLayoutPath(APPLICATION_PATH . '/modules/' . $module . '/layouts/scripts'); break; } } } }
Habilite o plugin
applications/layouts/scripts/layout.phtml
<?php echo $this->doctype() ?> <html> <head> <?php echo $this->headTitle() ?> <?php echo $this->headLink() ?> <?php echo $this->headStyle() ?> <?php echo $this->headScript() ?> </head> <body> <?php echo $this->layout()->content ?> </body> </html>
application/models/DbTable/User.php
<?php class Model_DbTable_User extends Zend_Db_Table { protected $_name = 'user'; protected $_primary = 'user_id';
Modelo User...
$data = array( 'username' => $username, 'email' => $email, 'password' => $hashed_pwd, 'salt' => $salt, 'user_type' => $user_type ); return $this->insert($data); }
Modelo User...
function updateUser($id, $email, $password=null, $user_type=1) { $where = array('user_id = ?' => (int)$id); $data = array('email' => $email,'user_type'=>$user_type); if ($password !== null){ // generate unique id (again) for the password salt $salt = strtolower(uniqid(rand(), true)); $hashed_pwd = strtolower(md5($password . $salt)); $data['salt']=$salt; $data['password']=$hashed_pwd; } $this->update($data, $where); } } // Fim da classe (Todo comeo tem um fim - Neo)
Autoloader
Permite que chamemos nossas classes modelo sem ter de inclu-las manualmente
No arquivo application/Bootstrap.php
public function _initAutoload() { $autoloader = new Zend_Application_Module_Autoloader( array( 'namespace'=>'', 'basePath'=>APPLICATION_PATH ) ); return $autoloader; }
Ainda no Bootstrap.php
if($this->getEnvironment() == 'development') { $profiler = new Zend_Db_Profiler_Firebug('All DB Queries'); $db = $this->getPluginResource('db'); $db = $db->getDbAdapter(); $profiler->setEnabled(true); $db->setProfiler($profiler); }
Estrutura da URL
/public/{controller}/{action} /public/{module}/{controller}/{action} /public/{controller} (assumes Index action) /public/{controller}/{action}/{key}/{value}/{key2}/ {value2} /public/admin/user/edit/user_id/3 (admin = module)
Roteamento de URL
Muitas opes
http://framework.zend.com/manual/en/zend.controller.router.html
Use zf tool
Havia um bug aqui na verso 1.9, com relao ao namespace (emulado) da classe, mas ele foi corrigido na verso 1.10.
Crie a ao
Abra o arquivo do controlador User em um editor... (sinta-se encorajado a usar o Eclipse for PHP Developers)
$form->addElement('captcha','captcha',array( 'label'=>'Enter the letters below', 'required'=>true, 'captcha'=>array( 'captcha'=>'Figlet', 'wordLen'=>5, 'timeout'=>300 ) )); $form->addElement('submit','Save',array( 'ignore'=>true, 'label'=>'Save New User' )); // Fim do formulrio
$request = $this->getRequest(); if($request->isPost()) { if($form->isValid($request->getPost())) { $data = $form->getValues(); $user = new Model_DbTable_User(); if($user->addUser( $data['username'], $data['email'], $data['password'],2)) // 2 for admin { $this->view->message = 'User created'; } else { $this->view->message = 'Something bad happened.'; } } } $this->view->form = $form; } // Fim do mtodo
Crie a viso
application/modules/admin/views/scripts/user/createuser.php
<?php if(isset($this->message)) { ?><h1><?=$this->message ?></h1><?php } ?> Cria seu novo usurio. <?php $this->form->setAction($this->url()); echo $this->form; ?>
public function loginAction() { $form = new Zend_Form(); $form->setMethod('post'); $form->addElement('text','username', array( 'label' =>'User name', 'required'=>true, 'filters'=>array('StringTrim') )); $form->addElement('password','password',array( 'label'=>'Password', 'required'=>true, 'filters'=>array('StringTrim') )); $form->addElement('submit','submit',array( 'label'=>'Login', 'ignore'=>true ));
$request = $this->getRequest(); $data = $request->getPost(); if($request->isPost() && $form->isValid($data)) { $u = new Model_DbTable_User(); $auth = new Zend_Auth_Adapter_DbTable($u->getAdapter() ,'user','username','password', "MD5(CONCAT(?,salt)) AND user_type=2" ); $auth->setIdentity($data['username'])->setCredential( $data['password'] ); $mainauth = Zend_Auth::getInstance(); $result = $mainauth->authenticate($auth); if($result->isValid()) { $this->view->message = 'Voc est logado agora.'; } else { $m = $result->getMessages(); $this->view->message = $m[0]; } } $this->view->form = $form; }// Fim do mtodo
<div id="login"> <?php echo $this->loginLink();?> </div> Isso chama o helper LoginLink que criamos antes. Tente isto agora: http://{yoursite}/admin/user/login
Se conseguimos ir to longe neste encontro, estou maravilhado. Se no, continuarei no prximo encontro.
Nota do tradutor: Se voc quer um exemplo de uma loja virtual, h um projeto criado com Zend Framework 1.10 em meu site, disponvel para download: http://www.fgsl.eti.br/site/files/exemplos/booba10.zip