zf2 básico : desenvolvendo um blog com o zend framework 2
DESCRIPTION
https://github.com/cezar08/blogTRANSCRIPT
![Page 1: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/1.jpg)
Desenvolvendo um Blog com Zend Framework 2
$ Cezar Junior de Souza - 2014
![Page 2: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/2.jpg)
Quem sou eu?
$ Bacharel em Sistemas de Informação;
$ Especialista em Engenharia e Qualidade de Software;
$ Programador Web desde 2010;
$ Mais informações: LinkeDin
![Page 3: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/3.jpg)
Cronograma
$ Visão geral do ZF2;
$ Principais características do ZF2;
$ Preparando o Ambiente de desenvolvimento;
$ Criando o projeto Blog com ZF2;
$ Configurando o banco de dados postgresql;
$ Criando o module Core;
$ Criando o module Admin;
$ Configurando o module Admin e seus Testes;
$ Criando os testes da Model User, e após, a Model User;
$ Criando os testes para o Controller Users, o Controller Users, seu Form e views;
![Page 4: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/4.jpg)
Cronograma
$ Utilizando Session;
$ Criando um serviço de autenticação e seus testes;
$ Criando controller para Autenticação, form e testes;
$ Criando os testes da Model Categorie, e após, a Model Categorie;
$ Criando os testes para o Controller Categories, o Controller Categories, seu Form e views;
$ Criando os testes da Model Post, e após, a Model Post;
$ Criando os testes para o Controller Posts, o Controller Posts, seu Form e views;
$ Criando o módulo main
$ Criando o IndexController do módulo Main, seu teste e exibindo os posts em sua view;
![Page 5: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/5.jpg)
Cronograma
$ Criando os testes da Model Comment, e após, a Model Comment;
$ Criando os testes para o Controller Comments, o Controller Comments, seu Form e views;
$ Fazendo comentários por Ajax;
$ Definindo o módulo Main como o módulo principal;
$ Criando o layout para o blog;
$ Criando ViewHelper de sessão;
$ Alterando menu de acordo com a role do usuário autenticado;
$ Adicionar join com a entity user na query de posts no IndexController do módulo main
$ Exibir dados do usuário que criou o post na view do IndexController do módulo main;
![Page 6: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/6.jpg)
Cronograma
$ Criando o controle de acesso com ACLs;
![Page 7: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/7.jpg)
Visão geral do ZF2
$ O que é um Framework?
![Page 8: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/8.jpg)
Visão geral do ZF2
$ Um pouco da história do Zend Framework
![Page 9: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/9.jpg)
Visão geral do ZF2$ Por que usar o ZF2?
● É modular e funciona como blocos de concreto que podem ser usados peça por peça com outras aplicações ou frameworks;
● Extensível: fácil de adaptar o framework para suas necessidades;
● Alta performasse: Projetado pensando em desempenho;
● Segurança: Todas as criptografias de segurança que você precisa;
● Comunidade: Uma extensa comunidade e uma grande base de colaboradores e usuários;
● Pronto para o negócio: Uma história de sucesso provada e executada em aplicações de alto uso e negócio critico.
![Page 10: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/10.jpg)
Visão geral do ZF2
$ Sistema de Autoloading
$ Namespaces:namespace Module\Folder;namespace Admin\Model;namespace Cliente\Controller;
$ Class-MapsNo arquivo autoload_classmap.php do módulo:return array( 'MinhaClasse1' => 'minha_classe1.php', 'MinhaClasse2' => 'minha_classe2.php', );
![Page 11: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/11.jpg)
Visão geral do ZF2
$ Dependency injection (Di)
$ é um design pattern com o proposito de diminuir o acoplamento entre os componentes do software.
![Page 12: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/12.jpg)
Visão geral do ZF2$ Dependency injection (Di)
$ Sem DIclass Foo {
protected $bar;…public function _construct(){
$this->bar = new Bar();}...
}Contras:
Dificuldades para os testesCódigo não isoladoDificuldade para reusar o código
$ Com DIclass Foo {
protected $bar;…public function _construct(Bar $bar){
$this->bar = $bar;}...
}Pros:
Facilidade nos testesFlexibilidade na arquitetura
![Page 13: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/13.jpg)
Visão geral do ZF2
$ Gerenciador de eventos
![Page 14: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/14.jpg)
Visão geral do ZF2
$ Table Gateway
![Page 15: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/15.jpg)
Visão geral do ZF2
$ O novo MVC do ZF2
![Page 16: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/16.jpg)
Visão geral do ZF2
$ Modulos
![Page 17: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/17.jpg)
Preparando o Ambiente de desenvolvimento
ATENÇÃO
Este processo de configuração do Ambiente de desenvolvimento irá funcionar nas versões do Ubuntu acima da 12.04, foi testado até a 14.04.
![Page 18: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/18.jpg)
Preparando o Ambiente de desenvolvimento
$ sudo apt-get moo
(__) (oo) /------\/ / | || * /\---/\ ~~ ~~ ..."Have you mooed today?"...
![Page 19: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/19.jpg)
Preparando o Ambiente de desenvolvimento
$ Instalando o sublime text 3
$ sudo add-apt-repository ppa:webupd8team/sublime-text-3$ sudo apt-get update$ sudo apt-get install sublime-text-installer
![Page 20: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/20.jpg)
Preparando o Ambiente de desenvolvimento
$ Instalando o postgresql e seu cliente pgadmin3
$ sudo apt-get install postgresql$ sudo apt-get install pgadmin3
$ Alterando a senha do usuário postgres
$ sudo -su postgres$ psql template1template1=# ALTER USER postgres WITH PASSWORD 'root';
![Page 21: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/21.jpg)
Preparando o Ambiente de desenvolvimento
$ Instalando o git
$ sudo apt-get install git
$ Instalando o php5 e a pdo do postgres para php
$ sudo apt-get install php5$ sudo apt-get install php5-pgsql
![Page 22: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/22.jpg)
Criando o projeto Blog
![Page 23: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/23.jpg)
Criando o projeto Blog
$ Baixar o Skeleton Application
cd ~mkdir workspacegit clone git://github.com/zendframework/ZendSkeletonApplication.gitcp -R ZendSkeletonApplication Blog
![Page 24: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/24.jpg)
Criando o projeto Blog
$ Baixar o Skeleton Application
$ cd ~$ mkdir workspace$ cd workspace$ git clone $ git://github.com/zendframework/ZendSkeletonApplication.git$ cp -R ZendSkeletonApplication Blog
![Page 25: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/25.jpg)
Criando o projeto Blog
$ Baixar as dependências do projeto pelo composer
$ cd Blog$ php composer.phar self-update$ php composer.phar install
![Page 26: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/26.jpg)
Criando o projeto Blog
$ Baixar o ZFTool
$ php composer.phar require zendframework/zftool:dev-master
![Page 27: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/27.jpg)
Criando o projeto Blog$ Baixar o phpunit
$ nano composer.json
$ Adicionar a dependência do phpunit nos pacotes requeridos
"require": {"php": ">=5.3.3",...,...,"phpunit/phpunit": "4.1.*"
}
$ php composer.phar update
![Page 28: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/28.jpg)
Configurando o Banco de dados
$ Configurando o Banco de dados
$ global.php
$ local.php
$ /config/test.config.php
![Page 29: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/29.jpg)
Criando o módulo Core
$ cd ~/workspace/Blog$ php vendor/zendframework/zftool/zf.php create module core
![Page 30: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/30.jpg)
Criando o módulo Admin
$ php vendor/zendframework/zftool/zf.php create module core
![Page 31: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/31.jpg)
Configurando os testes para o módulo admin
$ mkdir -p module/Admin/tests/src/Admin$ gedit module/Admin/tests/Bootstrap.php$ gedit module/Admin/tests/phpunit.xml$ mkdir module/Admin/tests/src/Admin/Model$ mkdir module/Admin/data
$ gedit module/Admin/data/test.data.php
![Page 32: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/32.jpg)
Criando os testes da Model User, e após, a Model User;
$ gedit module/Admin/tests/src/Admin/Model/UserTest.php
$ Executar o teste
$ php vendor/phpunit/phpunit/phpunit -c module/Admin/tests/phpunit.xml
$ Criando a model User
$ gedit module/Admin/src/Admin/Model/User.php
$ Executar o teste novamente
$ php vendor/phpunit/phpunit/phpunit -c module/Admin/tests/phpunit.xml
![Page 33: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/33.jpg)
Criando os testes para o Controller Users, o Controller Users, seu Form e views;
$ Criando os testes para o controller User
$ gedit module/Admin/tests/src/Admin/Controller/UsersControllerTest.php
$ php vendor/phpunit/phpunit/phpunit -c module/Admin/tests/phpunit.xml
$ Criando o controller Users
$ gedit module/Admin/src/Admin/Controller/UsersController.php
$ Form User
$ View
![Page 34: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/34.jpg)
Utilizando Session
$ Adicionando serviço de sessão e dependência para o serviço de autenticação
$ module/Admin/module.conf.php
![Page 35: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/35.jpg)
Criando um serviço de autenticação e seus testes;
$ Teste do Serviço de autenticação
$ Serviço de autenticação
![Page 36: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/36.jpg)
Criando controller para Autenticação, form e testes;
$ Form de login
$ Teste AuthController
$ AuthController
$ Adicionar AuthController as rotas
![Page 37: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/37.jpg)
Criando controller para Autenticação, form e testes;
$ Form de login
$ Teste AuthController
$ AuthController
$ Adicionar AuthController as rotas
![Page 38: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/38.jpg)
Criando os testes da Model Categorie, e após, a Model Categorie
$ Criando os testes para a model Categorie
$ Criando a model Categorie
![Page 39: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/39.jpg)
Criando os testes para o Controller Categories, o Controller Categories, seu Form e views
$ Criando os testes para o CategoriesController
$ Criando o Form Categorie
$ Criando o CategoriesController
$ Criando as visões do Categories
![Page 40: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/40.jpg)
Criando os testes da Model Post, e após, a Model Post
$ Criando os testes para a model Post
$ Criando a model post
$ Criando os testes para o post categories
$ Criando a model post categories
![Page 41: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/41.jpg)
Criando os testes para o Controller Posts, o Controller Posts, seu Form e views;
$ Criando os Tests para o PostsController
$ Criando o Form Post
$ Criando o PostsController
$ Criando as visões do Posts
![Page 42: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/42.jpg)
Criando o módulo main
$ php vendor/zendframework/zftool/zf.php create module main
$ Copiar modulo.config.php do módulo admin e mudar onde estiver escrito admin para main
$ Copiar estrutura de testes do module admin, inclusive o test.data.php
$ mkdir module/Main/data
$ cp -p module/Admin/data/test.data.php module/Main/data/test.data.php
![Page 43: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/43.jpg)
Criando o IndexController do módulo Main, seu teste e exibindo os posts em sua view
$ Criando o teste do index controller
$ Criando o index controller
$ Criando a visão e a partial de paginação
![Page 44: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/44.jpg)
Criando os testes da Model Comment, e após, a Model Comment
$ Criando os testes para a model Comment
$ Criando a model comment
![Page 45: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/45.jpg)
Criando os testes para o Controller Comments, o Controller Comments, seu Form e views;
$ Criando os testes para o CommentsController
$ Criando o form dos comentarios
$ Criando o CommentsController
$ Adicionando o comments no more do Index do main utilizando ajax
![Page 46: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/46.jpg)
Definindo o módulo main como o principal
$ Recortar do module.config.php do modulo application e colar no modulo main
'home' => array(
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => array(
'route' => '/',
'defaults' => array(
'controller' => 'Main\Controller\Index',
'action' => 'index',
),
),
),
$ Mover view auxiliares
$ mv module/Application/ew/error/ module/Main/view/error
$ mv module/Application/view/layout/ module/Main/view/layout
![Page 47: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/47.jpg)
Definindo o módulo main como o principal
$ Adicionar view manager no modulo.config.php do modulo main e deixar em branco o do modulo application
'view_manager' => array(
'display_not_found_reason' => true,
'display_exceptions' => true,
'doctype' => 'HTML5',
'not_found_template' => 'error/404',
'exception_template' => 'error/index',
'template_map' => array(
'layout/layout' => __DIR__ . '/../view/layout/layout.phtml',
'main/index/index' => __DIR__ . '/../view/main/index/index.phtml',
'error/404' => __DIR__ . '/../view/error/404.phtml',
'error/index' => __DIR__ . '/../view/error/index.phtml',
),
$ Alterar layout
![Page 48: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/48.jpg)
ViewHelper de sessão
$ module/Core/src/Core/View/Helper/Session.php
$ Adicionar helper no module.config.php do Modulo Core
$ Criando menu de acordo com o perfil de usuário autenticado
![Page 49: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/49.jpg)
Adicionar join com a entity user na query de posts no IndexController do módulo main
$ module/Main/src/Main/Controller/IndexController.php
![Page 50: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/50.jpg)
ACLs
$ Adicionando listeners
$ module/Admin/Module.php
$ Adicionar teste authorize no service Auth
$ Configurando roles, resources e privelegies no global.php
![Page 51: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/51.jpg)
ACLs
$ Construir às ACLs no arquivo module\Core\src\Core\Acl\Builder.php
$ Adicionar o método authorize no Service Admin\Auth.php
$ Executar os testes
$ Adicionar AuthController como rota padrão do modulo Admin
![Page 52: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2](https://reader033.vdocuments.site/reader033/viewer/2022060111/55666807d8b42aa21e8b5161/html5/thumbnails/52.jpg)
Referências
$ Zend Framework 2 na prática; Minetto; 2012
$ http://framework.zend.com/manual
$ Enrico Zimuel Senior Software Engineer, Zend Framework Core Team