ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2

52
Desenvolvendo um Blog com Zend Framework 2 $ Cezar Junior de Souza - 2014

description

https://github.com/cezar08/blog

Transcript of ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2

Page 1: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2

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

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

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

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

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

Cronograma

$ Criando o controle de acesso com ACLs;

Page 7: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2

Visão geral do ZF2

$ O que é um Framework?

Page 8: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2

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

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

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

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

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

Visão geral do ZF2

$ Gerenciador de eventos

Page 14: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2

Visão geral do ZF2

$ Table Gateway

Page 15: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2

Visão geral do ZF2

$ O novo MVC do ZF2

Page 16: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2

Visão geral do ZF2

$ Modulos

Page 17: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2

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

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

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

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

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

Criando o projeto Blog

Page 23: ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Referências

$ Zend Framework 2 na prática; Minetto; 2012

$ http://framework.zend.com/manual

$ Enrico Zimuel Senior Software Engineer, Zend Framework Core Team