SlideShare una empresa de Scribd logo
1 de 52
Descargar para leer sin conexión
Desenvolvendo um Blog com 
Zend Framework 2 
$ Cezar Junior de Souza - 2014
Quem sou eu? 
$ Bacharel em Sistemas de Informação; 
$ Especialista em Engenharia e Qualidade de 
Software; 
$ Programador Web desde 2010; 
$ Mais informações: LinkeDin
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;
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;
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;
Cronograma 
$ Criando o controle de acesso 
com ACLs;
Visão geral do ZF2 
$ O que é um Framework?
Visão geral do ZF2 
$ Um pouco da história do Zend Framework
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.
Visão geral do ZF2 
$ Sistema de Autoloading 
$ Namespaces: 
namespace ModuleFolder; 
namespace AdminModel; 
namespace ClienteController; 
$ Class-Maps 
No arquivo autoload_classmap.php do módulo: 
return array( 
'MinhaClasse1' => 'minha_classe1.php', 
'MinhaClasse2' => 'minha_classe2.php', 
);
Visão geral do ZF2 
$ Dependency injection (Di) 
$ é um design pattern com o proposito de diminuir o 
acoplamento entre os componentes do software.
Visão geral do ZF2 
$ Dependency injection (Di) 
$ Sem DI 
class Foo { 
protected $bar; 
… public function _construct(){ 
$this->bar = new Bar(); 
} 
... 
} 
Contras: 
Dificuldades para os testes 
Código não isolado 
Dificuldade para reusar o código 
$ Com DI 
class Foo { 
protected $bar; 
… public function _construct(Bar 
$bar){ 
$this->bar = $bar; 
} 
... 
} 
Pros: 
Facilidade nos testes 
Flexibilidade na arquitetura
Visão geral do ZF2 
$ Gerenciador de eventos
Visão geral do ZF2 
$ Table Gateway
Visão geral do ZF2 
$ O novo MVC do ZF2
Visão geral do ZF2 
$ Modulos
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.
Preparando o Ambiente de 
desenvolvimento 
$ sudo apt-get moo 
(__) 
(oo) 
/------/ 
/ | || 
* /---/ 
~~ ~~ 
..."Have you mooed today?"...
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
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 template1 
template1=# ALTER USER postgres WITH PASSWORD 'root';
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
Criando o projeto Blog
Criando o projeto Blog 
$ Baixar o Skeleton Application 
cd ~ 
mkdir workspace 
git clone 
git://github.com/zendframework/ZendSkeletonApplication.git 
cp -R ZendSkeletonApplication Blog
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
Criando o projeto Blog 
$ Baixar as dependências do projeto pelo composer 
$ cd Blog 
$ php composer.phar self-update 
$ php composer.phar install
Criando o projeto Blog 
$ Baixar o ZFTool 
$ php composer.phar require zendframework/zftool:dev-master
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
Configurando o Banco de dados 
$ Configurando o Banco de dados 
$ global.php 
$ local.php 
$ /config/test.config.php
Criando o módulo Core 
$ cd ~/workspace/Blog 
$ php vendor/zendframework/zftool/zf.php create module core
Criando o módulo Admin 
$ php vendor/zendframework/zftool/zf.php create module core
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
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
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
Utilizando Session 
$ Adicionando serviço de sessão e 
dependência para o serviço de autenticação 
$ module/Admin/module.conf.php
Criando um serviço de autenticação 
e seus testes; 
$ Teste do Serviço de autenticação 
$ Serviço de autenticação
Criando controller para Autenticação, form e 
testes; 
$ Form de login 
$ Teste AuthController 
$ AuthController 
$ Adicionar AuthController as rotas
Criando controller para Autenticação, form e 
testes; 
$ Form de login 
$ Teste AuthController 
$ AuthController 
$ Adicionar AuthController as rotas
Criando os testes da Model 
Categorie, e após, a Model 
Categorie 
$ Criando os testes para a model Categorie 
$ Criando a model Categorie
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
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
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
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
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
Criando os testes da Model Comment, e após, a 
Model Comment 
$ Criando os testes para a model Comment 
$ Criando a model comment
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
Definindo o módulo main como o principal 
$ Recortar do module.config.php do modulo application e colar no modulo main 
'home' => array( 
'type' => 'ZendMvcRouterHttpLiteral', 
'options' => array( 
'route' => '/', 
'defaults' => array( 
'controller' => 'MainControllerIndex', 
'action' => 'index', 
), 
), 
), 
$ Mover view auxiliares 
$ mv module/Application/ew/error/ module/Main/view/error 
$ mv module/Application/view/layout/ module/Main/view/layout
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
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
Adicionar join com a entity user na query de posts 
no IndexController do módulo main 
$ module/Main/src/Main/Controller/IndexController.php
ACLs 
$ Adicionando listeners 
$ module/Admin/Module.php 
$ Adicionar teste authorize no service Auth 
$ Configurando roles, resources e privelegies no 
global.php
ACLs 
$ Construir às ACLs no arquivo 
moduleCoresrcCoreAclBuilder.php 
$ Adicionar o método authorize no Service 
AdminAuth.php 
$ Executar os testes 
$ Adicionar AuthController como rota padrão do modulo 
Admin
Referências 
$ Zend Framework 2 na prática; Minetto; 2012 
$ http://framework.zend.com/manual 
$ Enrico Zimuel Senior Software Engineer, Zend 
Framework Core Team

Más contenido relacionado

La actualidad más candente

[Public] gerrit concepts and workflows
[Public] gerrit   concepts and workflows[Public] gerrit   concepts and workflows
[Public] gerrit concepts and workflowsYanbin Kong
 
Android studio 디버거 조금 더 잘 쓰기
Android studio 디버거 조금 더 잘 쓰기Android studio 디버거 조금 더 잘 쓰기
Android studio 디버거 조금 더 잘 쓰기Sewon Ann
 
Git - An Introduction
Git - An IntroductionGit - An Introduction
Git - An IntroductionBehzad Altaf
 
Git Series. Episode 3. Git Flow and Github-Flow
Git Series. Episode 3. Git Flow and Github-FlowGit Series. Episode 3. Git Flow and Github-Flow
Git Series. Episode 3. Git Flow and Github-FlowMikhail Melnik
 
Using the Android Native Development Kit (NDK)
Using the Android Native Development Kit (NDK)Using the Android Native Development Kit (NDK)
Using the Android Native Development Kit (NDK)Xavier Hallade
 
Using and Customizing the Android Framework / part 4 of Embedded Android Work...
Using and Customizing the Android Framework / part 4 of Embedded Android Work...Using and Customizing the Android Framework / part 4 of Embedded Android Work...
Using and Customizing the Android Framework / part 4 of Embedded Android Work...Opersys inc.
 
Learning AOSP - Android Booting Process
Learning AOSP - Android Booting ProcessLearning AOSP - Android Booting Process
Learning AOSP - Android Booting ProcessNanik Tolaram
 
Embedded Android Workshop with Oreo
Embedded Android Workshop with OreoEmbedded Android Workshop with Oreo
Embedded Android Workshop with OreoOpersys inc.
 
The battle between the states (all about flutter stateless & stateful widgets...
The battle between the states (all about flutter stateless & stateful widgets...The battle between the states (all about flutter stateless & stateful widgets...
The battle between the states (all about flutter stateless & stateful widgets...Katy Slemon
 
Android OTA updates
Android OTA updatesAndroid OTA updates
Android OTA updatesGary Bisson
 
Deep Dive Into Android Security
Deep Dive Into Android SecurityDeep Dive Into Android Security
Deep Dive Into Android SecurityMarakana Inc.
 

La actualidad más candente (20)

Git training
Git trainingGit training
Git training
 
Git
GitGit
Git
 
[Public] gerrit concepts and workflows
[Public] gerrit   concepts and workflows[Public] gerrit   concepts and workflows
[Public] gerrit concepts and workflows
 
Git & Github for beginners
Git & Github for beginnersGit & Github for beginners
Git & Github for beginners
 
Android studio 디버거 조금 더 잘 쓰기
Android studio 디버거 조금 더 잘 쓰기Android studio 디버거 조금 더 잘 쓰기
Android studio 디버거 조금 더 잘 쓰기
 
Git - An Introduction
Git - An IntroductionGit - An Introduction
Git - An Introduction
 
Git Series. Episode 3. Git Flow and Github-Flow
Git Series. Episode 3. Git Flow and Github-FlowGit Series. Episode 3. Git Flow and Github-Flow
Git Series. Episode 3. Git Flow and Github-Flow
 
Embedded Android : System Development - Part II (Linux device drivers)
Embedded Android : System Development - Part II (Linux device drivers)Embedded Android : System Development - Part II (Linux device drivers)
Embedded Android : System Development - Part II (Linux device drivers)
 
Intro to React
Intro to ReactIntro to React
Intro to React
 
How to Customize Android Framework&System
How to Customize Android Framework&SystemHow to Customize Android Framework&System
How to Customize Android Framework&System
 
Git and github 101
Git and github 101Git and github 101
Git and github 101
 
Using the Android Native Development Kit (NDK)
Using the Android Native Development Kit (NDK)Using the Android Native Development Kit (NDK)
Using the Android Native Development Kit (NDK)
 
Using and Customizing the Android Framework / part 4 of Embedded Android Work...
Using and Customizing the Android Framework / part 4 of Embedded Android Work...Using and Customizing the Android Framework / part 4 of Embedded Android Work...
Using and Customizing the Android Framework / part 4 of Embedded Android Work...
 
Learning AOSP - Android Booting Process
Learning AOSP - Android Booting ProcessLearning AOSP - Android Booting Process
Learning AOSP - Android Booting Process
 
Embedded Android : System Development - Part IV (Android System Services)
Embedded Android : System Development - Part IV (Android System Services)Embedded Android : System Development - Part IV (Android System Services)
Embedded Android : System Development - Part IV (Android System Services)
 
Embedded Android Workshop with Oreo
Embedded Android Workshop with OreoEmbedded Android Workshop with Oreo
Embedded Android Workshop with Oreo
 
The battle between the states (all about flutter stateless & stateful widgets...
The battle between the states (all about flutter stateless & stateful widgets...The battle between the states (all about flutter stateless & stateful widgets...
The battle between the states (all about flutter stateless & stateful widgets...
 
Android OTA updates
Android OTA updatesAndroid OTA updates
Android OTA updates
 
Deep Dive Into Android Security
Deep Dive Into Android SecurityDeep Dive Into Android Security
Deep Dive Into Android Security
 
Embedded Android : System Development - Part I
Embedded Android : System Development - Part IEmbedded Android : System Development - Part I
Embedded Android : System Development - Part I
 

Similar a Desenvolvendo Blog com ZF2

Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Elton Minetto
 
O que esperar do Zend Framework 3
O que esperar do Zend Framework 3O que esperar do Zend Framework 3
O que esperar do Zend Framework 3Flávio Lisboa
 
ZF Básico - 3. Quick Start
ZF Básico - 3. Quick StartZF Básico - 3. Quick Start
ZF Básico - 3. Quick StartMarcos Bezerra
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkPablo Dall'Oglio
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Vinícius de Paula
 
Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.Alex Guido
 
Curso de Introdução - PHP Zend Framework
Curso de Introdução - PHP Zend FrameworkCurso de Introdução - PHP Zend Framework
Curso de Introdução - PHP Zend FrameworkEvandro Klimpel Balmant
 
Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Jaime Neto
 
Zend Framework - PHPSP - 2009
Zend Framework - PHPSP - 2009Zend Framework - PHPSP - 2009
Zend Framework - PHPSP - 2009silva.edgar
 
ZF Básico - 1. Introdução
ZF Básico - 1. IntroduçãoZF Básico - 1. Introdução
ZF Básico - 1. IntroduçãoMarcos Bezerra
 
Lampada Php Conference Brasil 2007 Palestra
Lampada Php Conference Brasil 2007 PalestraLampada Php Conference Brasil 2007 Palestra
Lampada Php Conference Brasil 2007 PalestraDavid O'Keefe
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysDr. Spock
 
Desmistificando o Framework da Zend
Desmistificando o Framework da ZendDesmistificando o Framework da Zend
Desmistificando o Framework da ZendDomingos Teruel
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Frameworkelliando dias
 
Analise frameworks php
Analise frameworks phpAnalise frameworks php
Analise frameworks phpIgor Moura
 
JSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com JavaJSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com JavaDr. Spock
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysDr. Spock
 
CEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterCEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterEric Silva
 

Similar a Desenvolvendo Blog com ZF2 (20)

Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2
 
O que esperar do Zend Framework 3
O que esperar do Zend Framework 3O que esperar do Zend Framework 3
O que esperar do Zend Framework 3
 
ZF Básico - 3. Quick Start
ZF Básico - 3. Quick StartZF Básico - 3. Quick Start
ZF Básico - 3. Quick Start
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um Framework
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.
 
Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.
 
Grails
GrailsGrails
Grails
 
Curso de Introdução - PHP Zend Framework
Curso de Introdução - PHP Zend FrameworkCurso de Introdução - PHP Zend Framework
Curso de Introdução - PHP Zend Framework
 
Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Seu framework é melhor pra quê?
Seu framework é melhor pra quê?
 
Zend Framework - PHPSP - 2009
Zend Framework - PHPSP - 2009Zend Framework - PHPSP - 2009
Zend Framework - PHPSP - 2009
 
ZF Básico - 1. Introdução
ZF Básico - 1. IntroduçãoZF Básico - 1. Introdução
ZF Básico - 1. Introdução
 
Lampada Php Conference Brasil 2007 Palestra
Lampada Php Conference Brasil 2007 PalestraLampada Php Conference Brasil 2007 Palestra
Lampada Php Conference Brasil 2007 Palestra
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToys
 
Desmistificando o Framework da Zend
Desmistificando o Framework da ZendDesmistificando o Framework da Zend
Desmistificando o Framework da Zend
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Framework
 
Analise frameworks php
Analise frameworks phpAnalise frameworks php
Analise frameworks php
 
JSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com JavaJSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com Java
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToys
 
CEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterCEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniter
 
Zend Framework
Zend FrameworkZend Framework
Zend Framework
 

Desenvolvendo Blog com ZF2

  • 1. Desenvolvendo um Blog com Zend Framework 2 $ Cezar Junior de Souza - 2014
  • 2. Quem sou eu? $ Bacharel em Sistemas de Informação; $ Especialista em Engenharia e Qualidade de Software; $ Programador Web desde 2010; $ Mais informações: LinkeDin
  • 3. 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;
  • 4. 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;
  • 5. 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;
  • 6. Cronograma $ Criando o controle de acesso com ACLs;
  • 7. Visão geral do ZF2 $ O que é um Framework?
  • 8. Visão geral do ZF2 $ Um pouco da história do Zend Framework
  • 9. 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.
  • 10. Visão geral do ZF2 $ Sistema de Autoloading $ Namespaces: namespace ModuleFolder; namespace AdminModel; namespace ClienteController; $ Class-Maps No arquivo autoload_classmap.php do módulo: return array( 'MinhaClasse1' => 'minha_classe1.php', 'MinhaClasse2' => 'minha_classe2.php', );
  • 11. Visão geral do ZF2 $ Dependency injection (Di) $ é um design pattern com o proposito de diminuir o acoplamento entre os componentes do software.
  • 12. Visão geral do ZF2 $ Dependency injection (Di) $ Sem DI class Foo { protected $bar; … public function _construct(){ $this->bar = new Bar(); } ... } Contras: Dificuldades para os testes Código não isolado Dificuldade para reusar o código $ Com DI class Foo { protected $bar; … public function _construct(Bar $bar){ $this->bar = $bar; } ... } Pros: Facilidade nos testes Flexibilidade na arquitetura
  • 13. Visão geral do ZF2 $ Gerenciador de eventos
  • 14. Visão geral do ZF2 $ Table Gateway
  • 15. Visão geral do ZF2 $ O novo MVC do ZF2
  • 16. Visão geral do ZF2 $ Modulos
  • 17. 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.
  • 18. Preparando o Ambiente de desenvolvimento $ sudo apt-get moo (__) (oo) /------/ / | || * /---/ ~~ ~~ ..."Have you mooed today?"...
  • 19. 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
  • 20. 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 template1 template1=# ALTER USER postgres WITH PASSWORD 'root';
  • 21. 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
  • 23. Criando o projeto Blog $ Baixar o Skeleton Application cd ~ mkdir workspace git clone git://github.com/zendframework/ZendSkeletonApplication.git cp -R ZendSkeletonApplication Blog
  • 24. 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
  • 25. Criando o projeto Blog $ Baixar as dependências do projeto pelo composer $ cd Blog $ php composer.phar self-update $ php composer.phar install
  • 26. Criando o projeto Blog $ Baixar o ZFTool $ php composer.phar require zendframework/zftool:dev-master
  • 27. 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
  • 28. Configurando o Banco de dados $ Configurando o Banco de dados $ global.php $ local.php $ /config/test.config.php
  • 29. Criando o módulo Core $ cd ~/workspace/Blog $ php vendor/zendframework/zftool/zf.php create module core
  • 30. Criando o módulo Admin $ php vendor/zendframework/zftool/zf.php create module core
  • 31. 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
  • 32. 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
  • 33. 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
  • 34. Utilizando Session $ Adicionando serviço de sessão e dependência para o serviço de autenticação $ module/Admin/module.conf.php
  • 35. Criando um serviço de autenticação e seus testes; $ Teste do Serviço de autenticação $ Serviço de autenticação
  • 36. Criando controller para Autenticação, form e testes; $ Form de login $ Teste AuthController $ AuthController $ Adicionar AuthController as rotas
  • 37. Criando controller para Autenticação, form e testes; $ Form de login $ Teste AuthController $ AuthController $ Adicionar AuthController as rotas
  • 38. Criando os testes da Model Categorie, e após, a Model Categorie $ Criando os testes para a model Categorie $ Criando a model Categorie
  • 39. 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
  • 40. 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
  • 41. 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
  • 42. 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
  • 43. 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
  • 44. Criando os testes da Model Comment, e após, a Model Comment $ Criando os testes para a model Comment $ Criando a model comment
  • 45. 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
  • 46. Definindo o módulo main como o principal $ Recortar do module.config.php do modulo application e colar no modulo main 'home' => array( 'type' => 'ZendMvcRouterHttpLiteral', 'options' => array( 'route' => '/', 'defaults' => array( 'controller' => 'MainControllerIndex', 'action' => 'index', ), ), ), $ Mover view auxiliares $ mv module/Application/ew/error/ module/Main/view/error $ mv module/Application/view/layout/ module/Main/view/layout
  • 47. 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
  • 48. 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
  • 49. Adicionar join com a entity user na query de posts no IndexController do módulo main $ module/Main/src/Main/Controller/IndexController.php
  • 50. ACLs $ Adicionando listeners $ module/Admin/Module.php $ Adicionar teste authorize no service Auth $ Configurando roles, resources e privelegies no global.php
  • 51. ACLs $ Construir às ACLs no arquivo moduleCoresrcCoreAclBuilder.php $ Adicionar o método authorize no Service AdminAuth.php $ Executar os testes $ Adicionar AuthController como rota padrão do modulo Admin
  • 52. Referências $ Zend Framework 2 na prática; Minetto; 2012 $ http://framework.zend.com/manual $ Enrico Zimuel Senior Software Engineer, Zend Framework Core Team