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;
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
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
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