Palestra - Symfony Framework MVC PHP 5

5,603 views
5,451 views

Published on

Palestra realizada em abril de 2009 no FLISOL de Aracaju/Sergipe. O tema foi o framework orientado a objetos em PHP chamado Symfony.

Algumas de suas features:

- utiliza a arquitetura MVC (Model View Controller), isto é, separação das camadas de apresentação, controle e modelo.
- utiliza bastantes componentes independentes como o Doctrine e Propel (ORM), YML (arquivos de configuração) e outros. Que podem ser adotados em outros projetos que não utilizam o Symfony.

- possui geração automática de CRUD (create, retrieve, update, delete)

- possui uma documentação e comunidade muito grandes.
- geração automática de telas de administração
- ambiente de desenvolvimento com debug
- ambiente de teste
- integração com sincronizador de arquivos (para atualização do projeto na produção)
- separação de configuração para ambientes de teste, desenvolvimento e produção.

- e muito mais...

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,603
On SlideShare
0
From Embeds
0
Number of Embeds
235
Actions
Shares
0
Downloads
134
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Palestra - Symfony Framework MVC PHP 5

  1. 1. Framework OO para PHP 5 Palestrante: Lucas Augusto Carvalho lucasaugustomcc@gmail.com Flisol 2009 - Aracaju/SE
  2. 2. Sobre mim 2  Formando em Ciência da Computação na Universidade Federal de Sergipe;  Desenvolvedor Web desde 2000;  Programador PHP desde 2003;  Utiliza o symfony desde 2008;  Criador do site www.vestibularseriado.com.br  Está desenvolvendo a nova versão do site utilizando o framework symfony;  Realiza iniciação científica e TCC na área de usabilidade para TV Digital.
  3. 3. Roteiro 3  Introdução e conceito de framework;  Características e estrutura do Symfony;  MVC e ORM;  CLI (command line interface);  Links, roteamento e caching;  Criação e validação de formulários;  Scaffolding;  Plugins e integração com Ajax;  Depuração, Testes e Implantação;  Comunidade Symfony;
  4. 4. Indrodução ao Symfony 4  Fabien Potencier - Sensio Labs – empresa francesa;  Versão 1.2;  Licença MIT;  Escrito em PHP5 (orientado a objetos);  Utiliza padrão MVC (Model/View/Controller);  Possui framework de teste unitário e funcional;  Suporte para ambiente e implantação;  Segurança (proteção XSS por padrão);  Extensível (sistema de plugins).
  5. 5. Conceito de Framework 5  É uma “base” de onde se pode desenvolver algo maior ou mais específico.  É uma coleção de códigos-fonte, classes, funções, técnicas e metodologias integradas à um ambiente centralizador que facilitam o desenvolvimento e manutenção de aplicações.
  6. 6. Conceito de Framework 6  Qual a vantagem? $ Passado o período inicial de familiarização com a ferramenta, as vantagens começam a aparecer;  Como todos os desenvolvedores de uma mesma equipe usam um determinado framework, programam usando as mesmas convenções, classes e bibliotecas, a manutenção de um programa fica muito mais ágil (produtividade);  Encoraja o bom projeto e permite que se utilize facilmente boas práticas.
  7. 7. Conceito de Framework 7  Qual a vantagem?  Abstrai-se as tarefas mais repetitivas, permitindo a concentração de esforços na regras do negócio;  KISS - Keep It Simple Stupid (simplifique);  DRY – Don’t Repeat Yourself (não se repita) Deixe de repetir códigos comuns em módulos de um mesmo sistema CRUD;  Facilidade na geração de testes automatizados;  Geração de documentação;
  8. 8. Conceito de Framework 8  Uso de tecnologias embutidas:  MVC  ActiveRecord: Abstrai o programador de conhecer a fundo uma linguagem de manipulação de dados, como a SQL, além de manter toda a aplicação desenvolvida no paradigma orientado a objetos;  AJAX;  Internacionalização;
  9. 9. Desenvolvimento mais rápido 9  Cada linha tem um custo  Para escrever Menos código  Para testar  menos complexidade  Para manter  menos erros  Escrever menos  maior produtividade  Arquitetura:controlador, ORM,…  mais tempo  Configuração  Autoloading  Generators  Helpers  Mais tempo para as regras de negócio...
  10. 10. Principais benefícios do Symfony 10  Documentação  Configurabilidade Padrões  Proteção XSS PHP 5  Ferramentas de Depuração MVC Routeamento  Testes funcionais Cache  Extensibilidade: Plugins  Admin Generator  ORM : Propel ou Doctrine  i18n / l10n  Versão 1.0 mantida por longo tempo
  11. 11. Instalação do Symfony 11 PEAR (PHP Extension and Application Repository) $ pear channel-discover pear.symfony-project.com $ pear install symfony/symfony-1.2.1 PEAR package • Apache com mod_rewrite Subversion Package • PHP5.2.x Sandbox SVN (controle de versão) $ svn propedit svn:externals symfony http://svn.symfony-project.com/branches/1.2.1 Sandbox (pacote pronto) $ curl -O http://www.symfony-project.com/get/sf_sandbox-1.2.1.tgz $ tar zxpf sf_sandbox-1.2.1.tgz
  12. 12. Dependências 12 Dependências mínimas, tudo incluído Creole Abstração de banco de dados Suporte a MySQL, PostgreSQL, SQLite, MSSQL ... Propel / Doctrine Object Relationship Mapping (ORM) Pake Biblioteca para tarefas de comando de linha. Lime Biblioteca para testes de unidade e funcionais.
  13. 13. Dependências 13 Dependências mínimas, tudo incluído Mais... Prototype Script.aculo.us TinyMCE(WYSIWYG) DynArch.com Rich Calendar
  14. 14. Command line interface (CLI) 14 $ symfony generate:module frontend default >> dir+ ~/myproject/apps/frontend/modules/default/actions >> file+ ~/myproject/apps/frontend/modules/default/actions/actions.class.php >> dir+ ~/myproject/apps/frontend/modules/default/templates >> file+ ~/myproject/apps/frontend/modules/default/templates/indexSuccess.php >> file+ ~/myproject/test/functional/frontend/defaultActionsTest.php >> tokens ~/myproject/test/functional/frontend/defaultActionsTest.php >> tokens ~/myproject/apps/frontend/modules/default/actions/actions.class.php >> tokens ~/myproject/apps/frontend/modules/default/templates/indexSuccess.php • Cria automaticamente o básico do módulo; • Auxilia na manutenção; • Execução dos testes; • Fácil de checar se tudo ocorreu certo;
  15. 15. Arquitetura MVC 15  MVC é um acrônimo para Model, View e Controller (Modelo, Visão e Controlador). A idéia básica é separar todo o desenvolvimento de uma aplicação em 3 partes ou camadas:  Model – Gerencia o comportamento dos dados da aplicação.  View – Gerencia a saída gráfica e textual da parte da aplicação visível ao usuário final.  Controller – Interpreta as entradas de mouse e teclado do usuário, comandando a Visão e o Modelo para se alterarem de forma apropriada.
  16. 16. Arquitetura MVC 16  Todas as requisições feitas pelo usuário são enviadas ao Controller. Este manipula os dados usando o Model e invoca a View correta, de acordo com a ação executada ou com os resultados vindos do Model.  A grande vantagem de se utilizar a arquitetura MVC é a separação entre lógica (regras do negócio), apresentação e dados, favorecendo muito o trabalho em equipe.  Mudanças na apresentação, por exemplo, teriam pouco ou nenhum impacto nas demais camadas da aplicação... ao mesmo tempo que tudo continua absolutamente integrado.
  17. 17. Arquitetura MVC no Symfony 17 Model View Controller
  18. 18. Arquitetura MVC no Symfony 18  Modelo (Model)  Acesso e manipulação dos dados;  Baseado no Propel (por padrão);  Construtores para paginação, e ordenação filtragem;  Modelo pode ser configurado usando XML ou YAML;  Symfony gera seu modelo para você!  #> symfony propel:build-model  Symfony provê classes prontas para você estender seu modelo;
  19. 19. Modelo (Model) 19  Conexão com a base de dados # config/databases.yml prod: Suporte a ambientes propel: param: password: PAssWD all: propel: class: sfPropelDatabase param: dsn: mysql://root:@localhost/sfdemo  Definição do esquema Abstração do SQL # config/schema.yml post: _attributes: { phpName: Post } title: {type: varchar, size: 255} content: {type: longvarchar} is_published: {type: boolean} author_id: {type: integer, foreignTable: author, foreignReference: id} created_at: ~
  20. 20. Object Relational Mapper (ORM) 20 YAML (usado no RoR) • Propel permite independência do banco de dados; • Campos de Id, created_at, & chave estrangeira são gerados automaticamente; • Tabelas de dados = classes & linhas da tabela = objetos • Gerados automaticamente baseados no esquema.
  21. 21. Object Relational Mapper (ORM) 21 // lib/model/Author.php class Author extends BaseAuthor { function getFullName() { return $this->getFirstName().' '.$this->getLastName(); } } $author = new Author(); $author->setFirstName('Lucas Augusto'); $author->setLastName('Carvalho'); $author->save(); $post = new Post(); $post->setAuthor($author); $post->setPublishedOn('12:00 tomorrow'); $post->isPublished(true); $post->save(); $posts = PostPeer::doSelect(new Criteria());
  22. 22. Modelo (Model) 22  Dados de teste # data/fixtures/data.yml Author: lucas: first_name: Lucas 1) Cria as classes do modelo. last_name: Carvalho 2) Converte o esquema para SQL. 3) Cria as tabelas. Post: 4) Carrega os dados de teste. first_post: author_id: lucas title: Xtech 2007 $ symfony propel:build-all-load frontend
  23. 23. Arquitetura MVC no symfony 23  Apresentação (View) $ Layout e configuração global  Cada ação deve ter sua própria sub template;  Configurações da apresentação podem ser definidas até o nível de ações. $ symfony utiliza o PHP como sua linguagem de template Há opção de uso de um plugin do Smarty. $ Helpers  Partials e Slots  Fragmentos de template sem lógica de negócio.  Componentes  Fragmentos de template com lógica de negócio.
  24. 24. Arquitetura MVC no symfony 24  Controlador (Controller) $ Chama a lógica de negócio;  Cada “módulo” tem uma classe; controladora com um número de métodos de “ação”.  Conversão automática do URL em um módulo/ação apropriado.  Métodos de pré e pós execução.
  25. 25. Workflow do symfony 25 Cliente Controlador (Controller) Apresentação (View) Modelo (Model) Servidor
  26. 26. Organização do Código 26 Projeto v p« Aplicações  Módulos  Ações  Templates
  27. 27. Configurabilidade 27  Module level # apps/frontend/modules/post/config/generator.yml generator: class: sfPropelAdminGenerator param: model_class: Post list: display: [=title, author, created_at] filters: [title, author_id, published_on] max_per_page: 5 Configurações  Application level Framework # apps/frontend/config/security.yml Projeto default: Aplicação is_secure: on Modulo credentials: admin
  28. 28. Exemplo de código 28 # apps/frontend/modules/blog/actions/actions.class.php class blogActions extends sfActions { function executeShow() { $id = $this->getRequestParameter('id'); $this->post = PostPeer::retrieveByPk($id); MVC $this->forward404Unless($this->post); Model / View / Controller } XSS } Seguro por padrão shortcut # apps/frontend/modules/post/templates/showSuccess.php <h1 class="title"><?php echo $post->getTitle() ?></h1> <h2>par <?php echo $post->getAuthor()->getFullName() ?></h2> <p><?php echo $post->getHtmlContent(ESC_RAW) ?></p>
  29. 29. Links e Roteamento 29 homepage: / param: { module: blog, action: recent } <?php echo url_for('@homepage') ?> url: / homepage: / param: { module: blog, action: list } url: / recent: /recent param: { module: blog, action: recent } url: /recent post: <?php echo link_to( param: { module: blog, action: show } $post->getTitle(), /blog/1.html requirements: '@post?id=’.$post->getId() id: d+ ) ?> url: /blog/:id.html
  30. 30. Formulários 30  Criação $ Widgets // lib/form/ContactForm.class.php class ContactForm extends sfForm { public function configure() { $this->setWidgets(array( 'name' => new sfWidgetFormInput(), 'email' => new sfWidgetFormInput(), 'message' => new sfWidgetFormTextarea(), )); } }
  31. 31. Formulários 31  Validação // lib/form/ContactForm.class.php class ContactForm extends sfForm { public function configure() { ... $this->setValidators(array( 'name' => new sfValidatorString(array('required' => false)), 'email' => new sfValidatorEmail(array(), array('invalid' => 'O endereço de e-mail é inválido.')), 'subject' => new sfValidatorChoice(array('choices' => array_keys(self::$subjects))), 'message' => new sfValidatorString(array('min_length' => 4), array('required' => 'O campo mensagem é obrigatório.')), ));
  32. 32. 32
  33. 33. Plugins 33  Novos plugins criados toda semana (n. 535) $ ControlPanel : Gerenciamento Web de projetos utilizando o symfony;  ErrorLogger : Log de todos os erros 404 e 500 no banco de dados;  Guard : Autenticação e autorização;  Feed2 : Criação de RSS;  E mais:  Captcha,calendário, OpenID, Google Analytics, Google Sitemap, auto-complete, thumbnails, SSL, Forum, PDF, CMS, WYSIWYG, WebService, etc... $symfony plugin:install http://plugins.symfony-project.com/sfFeed2Plugin
  34. 34. Caching 34  Parte ou todo o código HTML que foi enviado para um usuário devido a uma requisição pode ser reutilizado para outra requisição.  O cache HTML é desabilitado por padrão.  Aumenta a performance de aplicação. $ Cache para uma ação (com ou sem o layout);  Cache de um partial, um componente, ou um componente slot;  Cache de um fragmento de template.
  35. 35. Ajax 35  Utilização de bibliotecas  Prototype  Script.acol.us  Ajax Helpers <div id="myzone"></div> <?php echo javascript_tag( remote_function(array( 'update' => 'myzone', 'url' => 'mymodule/myaction', )) ) ?>
  36. 36. Ajax 36  Ajax Helpers <div id="item_list"></div> <?php echo form_remote_tag(array( 'update' => 'item_list', 'url' => 'item/add', )) ?>
  37. 37. Scaffolding 37  Com um simples comando, symfony cria um módulo completo baseado na descrição de uma dada tabela.  O código gerado é mínimo e deve servir apenas como base para a fase de desenvolvimento para ter acesso à base de dados rapidamente, ou construir um protótipo. $ symfony propel:generate-crud frontend article Article
  38. 38. Admin Generator 38 • List, show, edit & add • 4 páginas, < 30 LOC
  39. 39. Admin Generator 39  Listagem
  40. 40. Admin Generator 40  Edição __toString() widgets Relação m2m
  41. 41. Depuração 41 • Diagnóstico de problemas • Checagem do tempo de execução • Otimização de consultas SQL
  42. 42. Depuração 42
  43. 43. Depuração 43  Mensagens de erro
  44. 44. Testes Funcionais 44  Simulação de Navegação // test/functional/frontend/blogActionsTest.php $browser = new sfTestBrowser(); $browser->initialize(); TDD $browser-> Test Driven Development get('/blog/1.html')-> isStatusCode(200)-> checkResponseElement('h1.title', '/XTech 2007/'); $ symfony test:functional frontend # get / Seletor CSS ok 1 - status code is 200 not ok 2 - response selector h1 does not match regex /XTech 2007/ # Looks like you failed 1 tests of 2 1..2
  45. 45. Implantação 45 # config/properties.ini $ symfony project:freeze [production] host=1.2.3.4 user=lucas dir=/var/www/sfblog type=rsync $ symfony project:deploy production --go
  46. 46. Implantação 46 $ symfony test:all unit/myFunctionTest.php................ok unit/mySecondFunctionTest.php..........ok unit/foo/barTest.php...................not ok Failed Test Stat Total Fail List of Failed ---------------------------------------------------- unit/foo/barTest.php 0 2 2 62 63 Failed 1/3 test scripts, 66.66% okay. 2/53 subtests failed, 96.22% okay.
  47. 47. Comunidade symfony • 47  Comunidade ativa e crescendo $ Desenvolvedores em mais de 80 países;  100 000 visitantes por mês no symfony-project.com.  Documentação Livre  The book  Askeet Tutorial  Jobeet Tutorial  Grupo de usuário  Google Groups: symfony-pt
  48. 48. 48
  49. 49. Usuários do symfony 49  Yahoo! (EUA)  Yahoo! Bookmarks  Delicious  Flickr  20 millions users  Web 2.0 / AJAX
  50. 50. Curso de symfony 50  Curso pela Softeam $ Valor: R$ 100,00 (estimativa);  Data prevista para início: 18/Julho;  Carga horária: 32h;  Aos sábados das 8:30h às 12h;  Local: Laboratório do DCOMP na UFS;  Dois alunos por computador (estimativa);  Assim que confirmado, será divulgado em:  www.softeam.com.br/cursos
  51. 51. 51 Framework OO para PHP 5 Palestrante: Lucas Augusto Carvalho lucasaugustomcc@gmail.com

×