Começando com Zend Framework



Documentos relacionados
Sensor de temperatura Parte 5 Cleiton Bueno Preparando o ambiente do Banco de dados Mysql

ZendWi Presentation 19/10/2012

Iniciando com Zend_Auth By Rob Allen, Document Revision Copyright 2007

WEBDESIGN. Professor: Paulo Marcos Trentin - paulo@paulotrentin.com.br Escola CDI de Videira

Personal Home Page PHP. Prof. Luiz Claudio F. de Souza

PHP e MySQL Autenticação de Usuários

ZEND F r a m e w o r k

Construindo uma ASP.Net MVC 4 Web Application usando Bootstrap no front-end

Prova de pré-requisito

Trabalhando com conexão ao banco de dados MySQL no Lazarus. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL.

Trabalho de Sistema de Informações. Instalação e configuração aplicativo Ocomon

Vamos criar uma nova Página chamada Serviços. Clique em Adicionar Nova.

Introdução ao HTML Utilizando frames Hospedando seu site na WEB

SiGE - Sistema de Gerência de Eventos

LINGUAGEM DE PROGRAMAÇÃO WEB

Carregando dados do Banco de Dados MySQL através de uma tag SELECT

Um objeto é uma instância de uma 'classe'. Você define uma classe utilizando o trecho de código abaixo;

Tecnologia WEB II. Prof. Erwin Alexander Uhlmann. Introdução ao PHP. UHLMANN, Erwin Alexander. Introdução ao PHP. Instituto Siegen. Guarulhos, 2012.

Web Design II. PHP mail. Docente: Célio B. Sengo

Exemplo de Aplicaça o Facebook

LAB 9 Programação com o framework Codeigniter [parte 1]

Manual Versão: 2.0 Autor: Alex Luciano Msn: Instalação

RELATÓRIO COM PROBLEMAS DE UTILIZAÇÃO DAS FERRAMENTAS PKP, COM SOLUÇÕES. Problema 1: Erro fatal tamanho da memória bytes esgotado

1) Ao ser executado o código abaixo, em PHP, qual será o resultado impresso em tela?

Criação de Aplicativos de redes sociais para Autenticação

Utilizando subversion como controle de versão

Curso de Iniciação ao Framework PHP Yii

Controle de acesso. .com.br

Ajuda em php + xml + sql Posted by kabonga /07/15 23:56

Sumario. Banco de Dados O que eh CakePHP Instalando o Cake Models, Controllers e Views Mais ferramentas do CakePHP Cake Bake a magica do CakePHP

HTML Básico Formulários. Matheus Meira

Guia de instalação para ambiente de Desenvolvimento LINUX

Android Banco de Dados. Ivan Nicoli

AMBIENTE WEB PARA GERÊNCIA DE PROCESSO DE SOFTWARE BASEADO NO SCRUM

Programação WEB. Prof. André Gustavo Duarte de Almeida docente.ifrn.edu.br/andrealmeida. Aula III Introdução PHP

MÓDULO MAGENTO. MANUAL DE INSTALAÇÃO v1.5

DWR DIRECTED WEB REMOTING

PORTAL DE ATENDIMENTO Manual do Usuário VERSÃO 2.0

Lazarus pelo SVN Linux/Windows

Passos Preliminares: Acessando a máquina virtual via ssh.

Formação de Administradores de Redes Linux LPI level 1. Aula 2 SENAC TI Fernando Costa

English Português. By erickalves 25 Julho, :08. Devido à política (#) de segurança. Encontrar Blogs Crie o seu blog de graça Ganhe prêmios

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS ARMAZENAMENTO EM BD NO DM. Prof. Angelo Augusto Frozza, M.Sc.

PHP Conference Brasil

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS ARMAZENAMENTO EM BD NO DM. Prof. Angelo Augusto Frozza, M.Sc.

Demoiselle Tutorial Módulo 1 Arquitetura

Instalação Apache + MySQL + PHPMyAdmin CentOS

MANUAL DE PADRONIZAÇÃO DE CODIFICAÇÃO PHP CODING STANDARDS

Programação WEB II. Formulários Em PHP. Métodos GET e POST progweb2@thiagomiranda.net. Thiago Miranda dos Santos Souza

Projeto Amadeus. Guia de Instalação Linux

JDBC. Prof. Márcio Bueno

Criação Pagina PHP & MySQL

Tutorial: Serviços web e suas composições

PROGRAMAÇÃO ORIENTADA A OBJETO EM PHP

BLOG ESCOLAS. Após acessar o seu respectivo blog, você será direcionado a tela a seguir. Vamos conhecê-la um pouco melhor.

Inserindo e Listando registros

Módulo e-rede OpenCart v1.0. Manual de. Instalação do Módulo. estamos todos ligados

Modelo Cliente/Servidor Por HIARLY ALVES

Conceitos de extensões Joomla!

Testando e Comparando Valores

Tutorial Instalação e configuração do Wordpress

Tutorial Slony passo a passo. Professor MSc. Willamys Rangel Nunes de Sousa

Aula 2: Listas e Links

Descompacte o arquivo site zip que foi baixado dentro da pasta do eclipse.

MANUAL MÓDULO CIELO QUERY COMMERCE (VERSÃO 1.6.1) QUERY COMMERCE

Manual de Instalação

Bases de Dados. Lab 1: Introdução ao ambiente. Figura 1. Base de dados de exemplo

Desenvolva rapidamente utilizando o framework CakePHP Elton Luís Minetto FISL 8.0

Para o envio de s pelo PHP é necessário seguir a seguinte sintaxe:

JSP - JavaServer Pages

Xerte Online Toolkits (XOT)

Login. Criar um novo website File > New > WebSite Framework 4.5 Visual C# ASP.NET Empty Web Site Nome do projeto: WebLogin

Incorporando JavaScript em HTML

1º passo: Instalando a rvm.

Treinamento - Union Web

Manual de Instalação do e.sic - Sistema Municipal de Informações ao Cidadão

Atividade JSP com Banco de Dados

Solução 1 - Copiar e colar a URL de convite do Ariba na barra de endereços do navegador:

Manual do Teclado de Satisfação Online WebOpinião

PgAdmin. O pgadmin é um software gráfico para administração do SGBD PostgreSQL disponível para Windows e UNIX.

Vamos criar uma nova Página chamada Serviços. Clique em Adicionar Nova.

CENTRO UNIVERSITÁRIO DE ENSINO SUPERIOR DO AMAZONAS - CIESA CENTRO DE PROCESSAMENTO DE DADOS CPD MANUAL DE UTILIZAÇÃO DO MOODLE 2.

Introdução ao Android

Você pode testar se está tudo OK, abrindo um navegador no Debian Linux e acessando qualquer site.

Bases de Dados 1º semestre

Definindo um Layout de Website sem Tabelas Vou apresentar nesse post como fazer o código do layout de um website sem utilizar

Ademir C. Gabardo. Novatec

Transcrição:

Começando com Zend Framework Versão brasileira da apresentação disponível em http://www.slideshare.net/baohx2000/zend-framework-19-setup-using-zendtool Ou: Como eu aprendi a parar de me preocupar e amei o framework. Parte 1: Configurando Tradutor e adaptador para a versão 1.11 do Zend Framework: Flávio Gomes da Silva Lisboa www.fgsl.eti.br

Preparando o Zend Framework Download ZF1.11 http://framework.zend.com/releases/zendframework-1.11.0/zendframework-1.11.0.zip Descompacte em um diretório da sua preferência Adicione o diretório que contém a pasta Zend na diretiva include_path do arquivo php.ini. Alternativa 1: Cole a pasta dentro do diretório library do seu projeto Alternativa 2: Crie um link simbólico na pasta library do seu projeto para a pasta Zend

Preparando o Zend Framework (Continuação) Copie os arquivos zf.php e zf.sh (ou zf.bat no Windows) para um diretório no caminho de busca do sistema operacional (no Linux, /usr/bin) (Só para Linux) Renomeie o zf.sh para zf e torne-o executável (sudo chmod a+x zf)

Usando Zend_Tool para configurar seu projeto Crie um diretório para hospedar seus projetos mkdir projects Entre nesse diretório cd projects Crie um projeto usando o script zf zf create project {projectname}

Integre Zend_Tool com um IDE Você pode automatizar a execução dos comandos do Zend_Tool, programando botões ou menus em um IDE, como o Eclipse, para chamálos. Incluído pelo tradutor

Adicione o projeto ao Apache Isso pode variar amplamente para cada sistema operacional e versão, assim você está realmente por conta própria nesta parte. Configure o diretório public do seu diretório {projectname} como DocumentRoot. Depois de reiniciar o Apache, você deve ser capaz de ir ao site que você configurou e ver a página padrão do Zend Framework!

Incluído pelo tradutor Tcharam!

Alternativa Você pode copiar o arquivo.htaccess do diretório public para a raiz do projeto. Criar uma variável contendo a base URL $baseurl = substr($_server['php_self'],0,strpos($_server['php_self'],'/pu blic/index.php')); Definir uma constante com o valor dessa variável define('base_url',$baseurl); Configurar o Controlador Frontal no application.ini resources.frontcontroller.baseurl = BASE_URL Incluído pelo tradutor

Configuração Normal da Aplicação Geralmente nós temos o domínio configurado para apontar diretamente para o diretório public Isso evita que o código PHP seja acessível diretamente Nenhum arquivo php deve ficar na pasta public a menos que seja simples e o framework peça por isso A exceção é o index.php

Estrutura de Diretórios /application arquivos da aplicação /library arquivos do framework ( /library/zend ) /public /tests Classes e bibliotecas extras usadas pela aplicação index.php, html/js/images/etc, qualquer coisa que deva ser diretamente acessível pelo navegador testes unitários

views Você está convidado a adivinhar o que vai aqui Diretório Application Bootstrap.php Configuração do framework específica para a aplicação configs Arquivo.ini da aplicação controllers Contém as classes controladores de página models Contém as classes que modelam os dados Errado, não são classes, são simples arquivos php+html.

index.php Prepara o include path Especifica a configuração da aplicação Carrega e roda o bootstrap

Crie uma tabela de banco de dados Use qualquer ferramenta com a qual esteja acostumado 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`) )

Adicione o banco de dados à configuração da aplicação Edite o arquivo application/configs/application.ini # 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 Note que o arquivo application.ini tem múltiplas seções Production, Staging, Development Isso pode ser definido no arquivo.htaccess Essas seções 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 aplicação A visão resultará em html que será colocado como conteúdo no layout Layout pode hospedar links dinâmicos para cabeçalho javascript, css, etc Facilmente acessível e controlável pelo controlador ou visão.

Layout (Continuação) Crie os diretórios application/layouts e application/layouts/scripts Adicione as seguintes linhas ao seu arquivo application.ini: #layout resources.layout.layout = "layout" resources.layout.layoutpath = APPLICATION_PATH "/layouts/scripts"

Layouts em Módulos Estamos fazendo um módulo administrativo Vamos carregar um layout específico 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 Edite o arquivo application/bootstrap.php public function _initlayouts() { Zend_Layout::startMvc(); $this->getpluginresource('frontcontroller') ->getfrontcontroller() ->registerplugin(new Plugin_ModuleLayout()); }

Layout geral da aplicação 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>

Crie um modelo User application/models/dbtable/user.php <?php class Model_DbTable_User extends Zend_Db_Table { protected $_name = 'user'; protected $_primary = 'user_id';

Modelo User (Continuação) public function adduser($username, $email, $password, $user_type=1) { // gera um id único para a senha $salt = strtolower(uniqid(rand(), true)); // e finalmente... algo mais para a chave 'secreta' de sua API inicial $api_secret_key = strtolower(uniqid(rand(), true)); // cria um hash de senha para gravar no banco $hashed_pwd = strtolower(md5($password. $salt));

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 começo 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;

Profiling de Banco de Dados no Firebug! Ainda no Bootstrap.php public function _initdbprofile() { } 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 Padrões para o controlador Index & ação Index /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 Você pode criar sua própria estrutura de url usando Zend_Controller_Router_* Muitas opções Static Regex Hostname Chain http://framework.zend.com/manual/en/zend.controller.router.html

Crie o módulo Admin Use zf tool zf create module admin Habilite o módulo no arquivo application.ini Adicione a área de [production] resources.frontcontroller.moduledirectory = APPLICATION_PATH /modules Copie o arquivo application/layout/scripts/layout.phtml para application/modules/admin/layouts/scripts/layout.phtml

Crie o controlador User zf create controller user false admin Havia um bug aqui na versão 1.9, com relação ao namespace (emulado) da classe, mas ele foi corrigido na versão 1.10.

Crie a ação zf create action createuser user 1 admin Abra o arquivo do controlador User em um editor... (sinta-se encorajado a usar o Eclipse for PHP Developers)

Crie um formulário de forma programática! public function createuseraction() { // cria o formulário $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('text','email',array( 'label'=>'email address', 'required'=>true, 'filters'=>array('stringtrim'), 'validators'=>array('emailaddress') ));

) )); )); $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 formulário

$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 método

Crie a visão application/modules/admin/views/scripts/user/createuser.php <?php if(isset($this->message)) {?><h1><?=$this->message?></h1><?php }?> Cria seu novo usuário. <?php $this->form->setaction($this->url()); echo $this->form;?>

Crie seu usuário! Você deve ser capaz de acessar http:// {yoursite}/admin/user/createuser Experimente!

Crie uma ação de login Feche o arquivo do controlador de usuário em seu editor zf create action login user 1 admin Abra-o e procure o método loginaction

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()) { } else { } $this->view->message = 'Você está logado agora.'; $m = $result->getmessages(); $this->view->message = $m[0]; } $this->view->form = $form; }// Fim do método

Crie uma ação de logout Tente por si mesmo criar a parte inicial do método de ação. public function logoutaction() { } $auth=zend_auth::getinstance(); $auth->clearidentity(); $this->_redirect('/admin/user/login');

Crie um helper de login Edite o arquivo application/modules/admin/views/helpers/loginlink.php <?php class Admin_View_Helper_LoginLink extends Zend_View_Helper_Abstract { public function loginlink() { $auth = Zend_Auth::getInstance(); $front = Zend_Controller_Front::getInstance(); if($auth->hasidentity()) { $username = $auth->getidentity(); return "Olá, $username [<a href='".$front->getbaseurl(). "/admin/user/logout'>logout</a>]"; } else { return '[<a href="'.$front->getbaseurl(). '/admin/user/login">login</a>]'; } } }

Adicione o helper de login ao layout Edite o arquivo application/modules/admin/layouts/scripts/layout.phtml Adicione antes o conteúdo do comando echo: <div id="login"> <?php echo $this->loginlink();?> </div> Isso chama o helper LoginLink que criamos antes. Tente isto agora: http://{yoursite}/admin/user/login

O bastante por hoje Se conseguimos ir tão longe neste encontro, estou maravilhado. Se não, continuarei no próximo 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, disponível para download: http://www.fgsl.eti.br/site/files/exemplos/booba10.zip