SlideShare una empresa de Scribd logo
1 de 51
Descargar para leer sin conexión
Framework OO para PHP 5



  Palestrante: Lucas Augusto Carvalho
               lucasaugustomcc@gmail.com

      Flisol 2009 - Aracaju/SE
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.
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;
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).
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.
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.
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;
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;
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...
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
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
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.
Dependências
13


     Dependências mínimas, tudo incluído
       Mais...
          Prototype
          Script.aculo.us
          TinyMCE(WYSIWYG)
          DynArch.com Rich Calendar
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;
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.
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.
Arquitetura MVC no Symfony
17




                     Model
                     View
                     Controller
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;
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:   ~
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.
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());
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
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.
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.
Workflow do symfony
25
                       Cliente




     Controlador
     (Controller)


                       Apresentação
                          (View)

         Modelo
         (Model)




                       Servidor
Organização do Código
26




             Projeto
                v
                p«
            Aplicações
              
             Módulos
              
              Ações
                   
            Templates
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
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>
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
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(),
             ));
         }
     }
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
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
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.
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',
           ))
         ) ?>
Ajax
36


        Ajax Helpers
     <div id="item_list"></div>
     <?php echo form_remote_tag(array(
         'update' => 'item_list',
         'url'   => 'item/add',
     )) ?>
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
Admin Generator
38




                • List, show, edit & add
                • 4 páginas, < 30 LOC
Admin Generator
39

    Listagem
Admin Generator
40

    Edição




__toString()


                 widgets   Relação m2m
Depuração
41



• Diagnóstico de
  problemas
• Checagem do
  tempo de
  execução
• Otimização de
  consultas SQL
Depuração
42
Depuração
43

    Mensagens de erro
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
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
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.
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
Usuários do symfony
49

    Yahoo! (EUA)
      Yahoo!  Bookmarks
      Delicious
      Flickr
      20 millions users
      Web 2.0 / AJAX
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



     Framework OO para PHP 5




     Palestrante: Lucas Augusto Carvalho
                  lucasaugustomcc@gmail.com

Más contenido relacionado

La actualidad más candente

Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Marcos Castro
 
Sistemas operacionais
Sistemas operacionaisSistemas operacionais
Sistemas operacionaisAbnel Junior
 
Minicurso PostgreSQl
Minicurso PostgreSQlMinicurso PostgreSQl
Minicurso PostgreSQlCezar Souza
 
Informática Básica - Aula 05 - Sistema Operacional Windows
Informática Básica - Aula 05 - Sistema Operacional WindowsInformática Básica - Aula 05 - Sistema Operacional Windows
Informática Básica - Aula 05 - Sistema Operacional WindowsJoeldson Costa Damasceno
 
Artigo científico anti vírus
Artigo científico    anti vírusArtigo científico    anti vírus
Artigo científico anti vírusleopp
 
Tipos de Sistemas Operacionais
Tipos de Sistemas OperacionaisTipos de Sistemas Operacionais
Tipos de Sistemas OperacionaisLuciano Crecente
 
Sistema operacional introdução
Sistema operacional introduçãoSistema operacional introdução
Sistema operacional introduçãoCleber Ramos
 
Evolução do windows
Evolução do windowsEvolução do windows
Evolução do windowsIvam KN
 
Navegadores de internet
Navegadores de internetNavegadores de internet
Navegadores de internetVelosa007
 
C traps and pitfalls for C++ programmers
C traps and pitfalls for C++ programmersC traps and pitfalls for C++ programmers
C traps and pitfalls for C++ programmersRichard Thomson
 

La actualidad más candente (20)

Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)
 
Tipos de Sistema operacional
Tipos de Sistema operacionalTipos de Sistema operacional
Tipos de Sistema operacional
 
Virtualização
VirtualizaçãoVirtualização
Virtualização
 
Sistemas Operacionais
Sistemas OperacionaisSistemas Operacionais
Sistemas Operacionais
 
Sistemas operacionais
Sistemas operacionaisSistemas operacionais
Sistemas operacionais
 
Conceito de processos
Conceito de processosConceito de processos
Conceito de processos
 
JAVA - Orientação a Objetos
JAVA - Orientação a ObjetosJAVA - Orientação a Objetos
JAVA - Orientação a Objetos
 
Minicurso PostgreSQl
Minicurso PostgreSQlMinicurso PostgreSQl
Minicurso PostgreSQl
 
Curso de Python e Django
Curso de Python e DjangoCurso de Python e Django
Curso de Python e Django
 
Informática Básica - Aula 05 - Sistema Operacional Windows
Informática Básica - Aula 05 - Sistema Operacional WindowsInformática Básica - Aula 05 - Sistema Operacional Windows
Informática Básica - Aula 05 - Sistema Operacional Windows
 
Visualg
VisualgVisualg
Visualg
 
Artigo científico anti vírus
Artigo científico    anti vírusArtigo científico    anti vírus
Artigo científico anti vírus
 
Tipos de Sistemas Operacionais
Tipos de Sistemas OperacionaisTipos de Sistemas Operacionais
Tipos de Sistemas Operacionais
 
Sistema operacional introdução
Sistema operacional introduçãoSistema operacional introdução
Sistema operacional introdução
 
Evolução do windows
Evolução do windowsEvolução do windows
Evolução do windows
 
Navegadores de internet
Navegadores de internetNavegadores de internet
Navegadores de internet
 
O que é o Computador
O que é o ComputadorO que é o Computador
O que é o Computador
 
Introdução ao BD Postgre
Introdução ao BD PostgreIntrodução ao BD Postgre
Introdução ao BD Postgre
 
PHP - Introdução
PHP - IntroduçãoPHP - Introdução
PHP - Introdução
 
C traps and pitfalls for C++ programmers
C traps and pitfalls for C++ programmersC traps and pitfalls for C++ programmers
C traps and pitfalls for C++ programmers
 

Destacado

Doctrine 2 camada de persistência para php
Doctrine 2   camada de persistência para phpDoctrine 2   camada de persistência para php
Doctrine 2 camada de persistência para phpFabio B. Silva
 
Doctrine 2.0: A evolução da persistência em PHP
Doctrine 2.0: A evolução da persistência em PHPDoctrine 2.0: A evolução da persistência em PHP
Doctrine 2.0: A evolução da persistência em PHPGuilherme Blanco
 
Orquestrando Aplicações PHP com Symfony
Orquestrando Aplicações PHP com SymfonyOrquestrando Aplicações PHP com Symfony
Orquestrando Aplicações PHP com SymfonyFlávio Lisboa
 
Sua aplicação não é filha de um framework
Sua aplicação não é filha de um frameworkSua aplicação não é filha de um framework
Sua aplicação não é filha de um frameworkDaniel Lima
 
PHP Symfony, Vale A Pena
PHP Symfony, Vale A PenaPHP Symfony, Vale A Pena
PHP Symfony, Vale A PenaMarcelo Fleury
 
Palestra criando aplicações seguras com php (2)
Palestra  criando aplicações seguras com php (2)Palestra  criando aplicações seguras com php (2)
Palestra criando aplicações seguras com php (2)Leandro Lugaresi
 
Doctrine2 In 10 Minutes
Doctrine2 In 10 MinutesDoctrine2 In 10 Minutes
Doctrine2 In 10 MinutesRyan Weaver
 
Prevenindo XSS: Execute apenas o SEU código
Prevenindo XSS: Execute apenas o SEU códigoPrevenindo XSS: Execute apenas o SEU código
Prevenindo XSS: Execute apenas o SEU códigoEr Galvão Abbott
 
Trabalhando de forma profissional com silex
Trabalhando de forma profissional com silexTrabalhando de forma profissional com silex
Trabalhando de forma profissional com silexMichael Douglas
 

Destacado (12)

Doctrine 2 camada de persistência para php
Doctrine 2   camada de persistência para phpDoctrine 2   camada de persistência para php
Doctrine 2 camada de persistência para php
 
Doctrine 2.0: A evolução da persistência em PHP
Doctrine 2.0: A evolução da persistência em PHPDoctrine 2.0: A evolução da persistência em PHP
Doctrine 2.0: A evolução da persistência em PHP
 
Orquestrando Aplicações PHP com Symfony
Orquestrando Aplicações PHP com SymfonyOrquestrando Aplicações PHP com Symfony
Orquestrando Aplicações PHP com Symfony
 
Php FrameWARks - sem CakePHP
Php FrameWARks - sem CakePHPPhp FrameWARks - sem CakePHP
Php FrameWARks - sem CakePHP
 
Sua aplicação não é filha de um framework
Sua aplicação não é filha de um frameworkSua aplicação não é filha de um framework
Sua aplicação não é filha de um framework
 
PHP Symfony, Vale A Pena
PHP Symfony, Vale A PenaPHP Symfony, Vale A Pena
PHP Symfony, Vale A Pena
 
Agilidade Com Scrum
Agilidade Com ScrumAgilidade Com Scrum
Agilidade Com Scrum
 
Api usando Silex
Api usando SilexApi usando Silex
Api usando Silex
 
Palestra criando aplicações seguras com php (2)
Palestra  criando aplicações seguras com php (2)Palestra  criando aplicações seguras com php (2)
Palestra criando aplicações seguras com php (2)
 
Doctrine2 In 10 Minutes
Doctrine2 In 10 MinutesDoctrine2 In 10 Minutes
Doctrine2 In 10 Minutes
 
Prevenindo XSS: Execute apenas o SEU código
Prevenindo XSS: Execute apenas o SEU códigoPrevenindo XSS: Execute apenas o SEU código
Prevenindo XSS: Execute apenas o SEU código
 
Trabalhando de forma profissional com silex
Trabalhando de forma profissional com silexTrabalhando de forma profissional com silex
Trabalhando de forma profissional com silex
 

Similar a Palestra - Symfony Framework MVC PHP 5

Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Vinícius de Paula
 
Entendendo Frameworks web com Python
Entendendo Frameworks web com PythonEntendendo Frameworks web com Python
Entendendo Frameworks web com PythonLuiz Aldabalde
 
Entendendo Framework Web com Python
Entendendo Framework Web com PythonEntendendo Framework Web com Python
Entendendo Framework Web com PythonPythOnRio
 
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
 
Phalcon FrameWork - Considerações Iniciais
Phalcon FrameWork - Considerações IniciaisPhalcon FrameWork - Considerações Iniciais
Phalcon FrameWork - Considerações IniciaisPauloRobertoBolsanel
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2PrinceGuru MS
 
Minicurso de Cakephp
Minicurso de CakephpMinicurso de Cakephp
Minicurso de CakephpCauan Cabral
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super heroElton Minetto
 
Slide 01 introdução ao php e ao code igniter
Slide 01   introdução ao php e ao code igniterSlide 01   introdução ao php e ao code igniter
Slide 01 introdução ao php e ao code igniterRaniere de Lima
 
Aplicações Profissionais para Internet com Zend Framework
Aplicações Profissionais para Internet com Zend FrameworkAplicações Profissionais para Internet com Zend Framework
Aplicações Profissionais para Internet com Zend FrameworkFlávio Lisboa
 
Desenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyDesenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyRelsi Maron
 
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...BrunoSouza617
 
Criando Aplicações .NET com o TheWebMind
Criando Aplicações .NET com o TheWebMindCriando Aplicações .NET com o TheWebMind
Criando Aplicações .NET com o TheWebMindJaydson Gomes
 

Similar a Palestra - Symfony Framework MVC PHP 5 (20)

Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.
 
Entendendo Frameworks web com Python
Entendendo Frameworks web com PythonEntendendo Frameworks web com Python
Entendendo Frameworks web com Python
 
Entendendo Framework Web com Python
Entendendo Framework Web com PythonEntendendo Framework Web com Python
Entendendo Framework Web com Python
 
Lampada Php Conference Brasil 2007 Palestra
Lampada Php Conference Brasil 2007 PalestraLampada Php Conference Brasil 2007 Palestra
Lampada Php Conference Brasil 2007 Palestra
 
Phalcon FrameWork - Considerações Iniciais
Phalcon FrameWork - Considerações IniciaisPhalcon FrameWork - Considerações Iniciais
Phalcon FrameWork - Considerações Iniciais
 
Palestra
PalestraPalestra
Palestra
 
Programando php com excelência
Programando php com excelênciaProgramando php com excelência
Programando php com excelência
 
Java Seminar
Java SeminarJava Seminar
Java Seminar
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
Minicurso de Cakephp
Minicurso de CakephpMinicurso de Cakephp
Minicurso de Cakephp
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
Cake Php
Cake PhpCake Php
Cake Php
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super hero
 
Slide 01 introdução ao php e ao code igniter
Slide 01   introdução ao php e ao code igniterSlide 01   introdução ao php e ao code igniter
Slide 01 introdução ao php e ao code igniter
 
PHP 10 CodeIgniter
PHP 10 CodeIgniterPHP 10 CodeIgniter
PHP 10 CodeIgniter
 
Aplicações Profissionais para Internet com Zend Framework
Aplicações Profissionais para Internet com Zend FrameworkAplicações Profissionais para Internet com Zend Framework
Aplicações Profissionais para Internet com Zend Framework
 
Desenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyDesenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2py
 
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
 
Criando Aplicações .NET com o TheWebMind
Criando Aplicações .NET com o TheWebMindCriando Aplicações .NET com o TheWebMind
Criando Aplicações .NET com o TheWebMind
 
Minicurso Yii2
Minicurso Yii2Minicurso Yii2
Minicurso Yii2
 

Más de Lucas Augusto Carvalho

Pexincha: Startup Weekend São Paulo Retail+Tech 2018
Pexincha: Startup Weekend São Paulo Retail+Tech 2018Pexincha: Startup Weekend São Paulo Retail+Tech 2018
Pexincha: Startup Weekend São Paulo Retail+Tech 2018Lucas Augusto Carvalho
 
Requirements for Supporting the Iterative Exploration of Scientific Workflow ...
Requirements for Supporting the Iterative Exploration of Scientific Workflow ...Requirements for Supporting the Iterative Exploration of Scientific Workflow ...
Requirements for Supporting the Iterative Exploration of Scientific Workflow ...Lucas Augusto Carvalho
 
Converting Scripts into Reproducible Workflow Research Objects
Converting Scripts into Reproducible Workflow Research ObjectsConverting Scripts into Reproducible Workflow Research Objects
Converting Scripts into Reproducible Workflow Research ObjectsLucas Augusto Carvalho
 
Google Analytics: Como explorar suas estatísticas para fazer mais negócios.
Google Analytics: Como explorar suas estatísticas para fazer mais negócios.Google Analytics: Como explorar suas estatísticas para fazer mais negócios.
Google Analytics: Como explorar suas estatísticas para fazer mais negócios.Lucas Augusto Carvalho
 
TV Digital interativa - Projeto TeouVi
TV Digital interativa - Projeto TeouViTV Digital interativa - Projeto TeouVi
TV Digital interativa - Projeto TeouViLucas Augusto Carvalho
 
Ferramentas Para Acessibilidade Na Web
Ferramentas Para Acessibilidade Na WebFerramentas Para Acessibilidade Na Web
Ferramentas Para Acessibilidade Na WebLucas Augusto Carvalho
 
Rascunho do Seminário sobre Acessibilidade na Web
Rascunho do Seminário sobre Acessibilidade na WebRascunho do Seminário sobre Acessibilidade na Web
Rascunho do Seminário sobre Acessibilidade na WebLucas Augusto Carvalho
 

Más de Lucas Augusto Carvalho (14)

Pexincha: Startup Weekend São Paulo Retail+Tech 2018
Pexincha: Startup Weekend São Paulo Retail+Tech 2018Pexincha: Startup Weekend São Paulo Retail+Tech 2018
Pexincha: Startup Weekend São Paulo Retail+Tech 2018
 
Requirements for Supporting the Iterative Exploration of Scientific Workflow ...
Requirements for Supporting the Iterative Exploration of Scientific Workflow ...Requirements for Supporting the Iterative Exploration of Scientific Workflow ...
Requirements for Supporting the Iterative Exploration of Scientific Workflow ...
 
NiW: Notebooks into Workflows
NiW: Notebooks into WorkflowsNiW: Notebooks into Workflows
NiW: Notebooks into Workflows
 
Converting Scripts into Reproducible Workflow Research Objects
Converting Scripts into Reproducible Workflow Research ObjectsConverting Scripts into Reproducible Workflow Research Objects
Converting Scripts into Reproducible Workflow Research Objects
 
Conhecendo a rede social Google+
Conhecendo a rede social Google+Conhecendo a rede social Google+
Conhecendo a rede social Google+
 
Empreendedorismo Digital - versão 2
Empreendedorismo Digital - versão 2Empreendedorismo Digital - versão 2
Empreendedorismo Digital - versão 2
 
Empreendedorismo Digital
Empreendedorismo DigitalEmpreendedorismo Digital
Empreendedorismo Digital
 
Sistemas de Recomendação na web
Sistemas de Recomendação na webSistemas de Recomendação na web
Sistemas de Recomendação na web
 
Google Analytics: Como explorar suas estatísticas para fazer mais negócios.
Google Analytics: Como explorar suas estatísticas para fazer mais negócios.Google Analytics: Como explorar suas estatísticas para fazer mais negócios.
Google Analytics: Como explorar suas estatísticas para fazer mais negócios.
 
TV Digital interativa - Projeto TeouVi
TV Digital interativa - Projeto TeouViTV Digital interativa - Projeto TeouVi
TV Digital interativa - Projeto TeouVi
 
Palestra - SEO - Otimização Busca
Palestra - SEO - Otimização BuscaPalestra - SEO - Otimização Busca
Palestra - SEO - Otimização Busca
 
Ferramentas Para Acessibilidade Na Web
Ferramentas Para Acessibilidade Na WebFerramentas Para Acessibilidade Na Web
Ferramentas Para Acessibilidade Na Web
 
Seminário Final
Seminário FinalSeminário Final
Seminário Final
 
Rascunho do Seminário sobre Acessibilidade na Web
Rascunho do Seminário sobre Acessibilidade na WebRascunho do Seminário sobre Acessibilidade na Web
Rascunho do Seminário sobre Acessibilidade na Web
 

Palestra - Symfony Framework MVC PHP 5

  • 1. Framework OO para PHP 5 Palestrante: Lucas Augusto Carvalho lucasaugustomcc@gmail.com Flisol 2009 - Aracaju/SE
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Dependências 13 Dependências mínimas, tudo incluído Mais... Prototype Script.aculo.us TinyMCE(WYSIWYG) DynArch.com Rich Calendar
  • 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. 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. 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. Arquitetura MVC no Symfony 17 Model View Controller
  • 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. 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. 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. 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. 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. 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. 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. Workflow do symfony 25 Cliente Controlador (Controller) Apresentação (View) Modelo (Model) Servidor
  • 26. Organização do Código 26 Projeto v p« Aplicações  Módulos  Ações  Templates
  • 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. 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. 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. 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. 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
  • 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. 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. 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. Ajax 36  Ajax Helpers <div id="item_list"></div> <?php echo form_remote_tag(array( 'update' => 'item_list', 'url' => 'item/add', )) ?>
  • 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. Admin Generator 38 • List, show, edit & add • 4 páginas, < 30 LOC
  • 40. Admin Generator 40  Edição __toString() widgets Relação m2m
  • 41. Depuração 41 • Diagnóstico de problemas • Checagem do tempo de execução • Otimização de consultas SQL
  • 43. Depuração 43  Mensagens de erro
  • 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. 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. 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. 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
  • 49. Usuários do symfony 49  Yahoo! (EUA)  Yahoo! Bookmarks  Delicious  Flickr  20 millions users  Web 2.0 / AJAX
  • 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 Framework OO para PHP 5 Palestrante: Lucas Augusto Carvalho lucasaugustomcc@gmail.com