Download - Introdução ao Zend Framework 2
![Page 1: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/1.jpg)
as novidades do PHPe o
Zend Framework 2
![Page 2: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/2.jpg)
Elton MinettoGraduado/pós-graduado em Ciência da Computação
Desenvolvedor desde 1997Professor desde 2004
Autor de dois livros sobre PHP
Sócio da CoderockrInstrutor do Code Squad
![Page 3: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/3.jpg)
PHP
![Page 4: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/4.jpg)
Namespaces
![Page 5: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/5.jpg)
<?phpnamespace Core\Service;
use Zend\Http\Client as HttpClient;use Zend\Http\Request;class Auth { public function __construct($apiKey, $apiUri, $rpcUri) { $this->httpClient = new HttpClient(); }}
![Page 6: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/6.jpg)
Traits
![Page 7: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/7.jpg)
trait Veiculo { public function rodar(){ /* x */ }}
trait Aeronave { public function voar(){ /* x */ }}
trait Brinquedo { private $pedagogico;
public function isPedagogico(){ return $this->pedagogico; }}
![Page 8: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/8.jpg)
class Carrinho { use Veiculo, Brinquedo;}
class Aviaozinho { use Aeronave, Brinquedo;}
class Helicoptero { use Aeronave;}
class TanqueDeGuerra { use Veiculo;}
![Page 9: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/9.jpg)
Servidor embutido
![Page 10: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/10.jpg)
php -S localhost:8080 -t /var/www/projeto
![Page 11: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/11.jpg)
PSR
![Page 12: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/12.jpg)
PSR - 0: regras de autoloader de classesPSR - 1: regras básicas de codificação
PSR - 2: regras avançadas de codificação
![Page 13: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/13.jpg)
Composer
![Page 14: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/14.jpg)
Ferramenta que facilita a instalação e atualização de dependências
![Page 15: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/15.jpg)
Funções anônimas
![Page 16: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/16.jpg)
public function getServiceConfig(){ return array( 'factories' => array( 'Cache' => function($sm) { $config = include __DIR__ . 'config.php'; $cache = StorageFactory::factory( array( 'adapter' => $config['cache']) ); return $cache; } ), );}
![Page 17: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/17.jpg)
Frameworks
![Page 18: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/18.jpg)
Uma base de onde pode-se desenvolver algo maior ou mais específico. É uma coleção de códigos, classes, funções,
técnicas e metodologias que facilitam o desenvolvimento de novos softwares.
![Page 19: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/19.jpg)
Zend Framework2
![Page 20: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/20.jpg)
Desenvolvido pela Zend junto com a comunidade PHP
Mais de 2 anos de desenvolvimentoMais de 200 profissionais envolvidos
Apoio Google, Microsoft, entre outras
![Page 21: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/21.jpg)
Vantagens
![Page 22: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/22.jpg)
Usa recursos mais avançados do PHP5.3.3 em diante
![Page 23: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/23.jpg)
Processo de contribuição mais simples Pull-requests no Github
Não precisa assinar termos
![Page 24: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/24.jpg)
Fácil instalação e atualizaçãovia Composer
![Page 25: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/25.jpg)
No more magic!Tudo é mais explícito, fácil de manter e
testar
![Page 26: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/26.jpg)
//ZF1class IndexController extends Zend_Controller_Action{ public function indexAction() { $this->view->message = “Hello World”; }}
Onde foi definido?
![Page 27: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/27.jpg)
//ZF2namespace Application\Controller;
use Zend\View\Model\ViewModel;use Zend\Mvc\Controller\AbstractActionController;
class Index extends AbstractActionController{ public function indexAction() { return new ViewModel( array('message' => “Hello World”) );}
![Page 28: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/28.jpg)
Fácil integração com frameworks e componentes compatíveis com o
PSR-0 e Composer(Symfony, Doctrine, Monolog, etc)
![Page 29: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/29.jpg)
Desvantagens
![Page 30: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/30.jpg)
Pouca documentação
![Page 31: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/31.jpg)
Módulos
![Page 32: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/32.jpg)
"[] um módulo é uma coleção de código e outros arquivos que resolve um problema específico de uma aplicação ou site."
Mattew O'Phinney. Zend Framework project leader
![Page 33: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/33.jpg)
Totalmente reutilizáveisDezenas de módulos desenvolvidos no
http://modules.zendframework.com
![Page 34: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/34.jpg)
Eventos
![Page 35: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/35.jpg)
Como introduzir logs e debugs no códido da aplicação?Como introduzir cache na aplicação como um todo?Como introduzir validações, filtros, ACL?
Soluções: traits (somente PHP 5.4), PubSub pattern, eventos
![Page 36: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/36.jpg)
Um EventManager é um objeto que agrega listeners para um ou mais eventos e que gera (trigger) outros eventos.Um listener é uma função/método (callback) que reage a um evento
![Page 37: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/37.jpg)
Injeção de dependências
![Page 38: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/38.jpg)
class User{ protected $storage;
public function __construct() { $this->storage = new SessionStorage(); }}
$user = new User();
Fácil de usar
Difícil de customizar
![Page 39: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/39.jpg)
class User{ protected $storage;
public function __construct($storage) { $this->storage = $storage; }}
$storage = new SessionStorage()$user = new User($storage);
Fácil de customizar
Mais difícil de usar
![Page 40: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/40.jpg)
//formas de injeção de dependências$storage = new SessionStorage();
//injeção pelo construtor$user = new User($storage);
//injeção usando setters$user = new User();$user->setStorage($storage);
//injeção por propriedade$user = new User();$user->storage = $storage;
![Page 41: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/41.jpg)
ServiceManager
![Page 42: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/42.jpg)
"[] é um registro, ou container que armazena os vários objetos necessários para a sua aplicação[] armazena a informação necessária para instanciar estes objetos conforme forem necessários [] é um gerenciador de objetos, ou gerenciador de instâncias."
Evan Coury, software engineer.
![Page 43: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/43.jpg)
/** * Retorna a configuração do service manager do módulo * @return array */public function getServiceConfig(){ return array( 'factories' => array( 'Application\Service\Auth' => function($sm) { $dbAdapter = $sm->get('DbAdapter'); return new Service\Auth($dbAdapter); }, ), );}
//uso em um controller$auth = $this->getServiceManager()->get('Application\Service\Auth');
![Page 44: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/44.jpg)
MVC
![Page 45: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/45.jpg)
Tudo é um evento Controllers são serviços
![Page 46: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/46.jpg)
Referências
![Page 47: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/47.jpg)
http://www.slideshare.net/weierophinney/zend-framework-20-patterns-tutorialhttp://www.slideshare.net/fabpot/dependency-injectionzendcon2010http://diogobesson.com.br/programacao/php-traits/http://code-squad.com/screencast/composerhttp://mwop.net/blog/267-Getting-started-writing-ZF2-modules.htmlhttp://static.zend.com/topics/ZF2-Getting-
![Page 48: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/48.jpg)
Contato
![Page 49: Introdução ao Zend Framework 2](https://reader034.vdocuments.site/reader034/viewer/2022051314/54c41f9c4a795968638b456e/html5/thumbnails/49.jpg)
@eminettohttp://www.eltonminetto.net
http://coderockr.comhttp://code-squad.com