SlideShare uma empresa Scribd logo
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

Mais conteúdo relacionado

PDF
Aplicativos Móveis
PDF
Computação Gráfica
PPTX
A Linguagem sql
PDF
Plano Diretor - O que é o
PDF
Especificação de Requisitos de Software
PPTX
CISC e RISC
PDF
Resumo: Quadro da Arquitetura no Brasil
PDF
Arquitetura de Software
Aplicativos Móveis
Computação Gráfica
A Linguagem sql
Plano Diretor - O que é o
Especificação de Requisitos de Software
CISC e RISC
Resumo: Quadro da Arquitetura no Brasil
Arquitetura de Software

Mais procurados (7)

PDF
Aula 4 reform urbanas barcelona
PPTX
Prototipação de software
PPS
Gerência de Configuração
PDF
Apostila desenho t cnico e arquitet-nico
PDF
Estudo da Operação SAAL – Da teoria à prática
PDF
Modelo V
PDF
Construindo aplicações web java com netbeans
Aula 4 reform urbanas barcelona
Prototipação de software
Gerência de Configuração
Apostila desenho t cnico e arquitet-nico
Estudo da Operação SAAL – Da teoria à prática
Modelo V
Construindo aplicações web java com netbeans
Anúncio

Destaque (12)

PDF
Doctrine 2 camada de persistência para php
KEY
Doctrine 2.0: A evolução da persistência em PHP
PDF
Orquestrando Aplicações PHP com Symfony
PPT
Php FrameWARks - sem CakePHP
PDF
Sua aplicação não é filha de um framework
ODP
PHP Symfony, Vale A Pena
PPT
Agilidade Com Scrum
PDF
Api usando Silex
PPTX
Palestra criando aplicações seguras com php (2)
PDF
Doctrine2 In 10 Minutes
PDF
Prevenindo XSS: Execute apenas o SEU código
PDF
Trabalhando de forma profissional com silex
Doctrine 2 camada de persistência para php
Doctrine 2.0: A evolução da persistência em PHP
Orquestrando Aplicações PHP com Symfony
Php FrameWARks - sem CakePHP
Sua aplicação não é filha de um framework
PHP Symfony, Vale A Pena
Agilidade Com Scrum
Api usando Silex
Palestra criando aplicações seguras com php (2)
Doctrine2 In 10 Minutes
Prevenindo XSS: Execute apenas o SEU código
Trabalhando de forma profissional com silex
Anúncio

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

PDF
Desenvolvimento Web com Simfony Framework.
PDF
Desenvolvimento Web Avançado usando PHP
PDF
Desenvolvimento Web com CakePHP
PDF
PHP Turbinado com CodeIgniter - Conisli 2011
PDF
Frameworks de Desenvolvimento Web com PHP
PDF
Serversidephp pptx2-120418140114-phpapp01
PDF
Slide Aula - Curso CakePHP
PPT
XPT Framework
PDF
Palestra Ruby on Rails SETA 2008/01
PDF
Frameworks Opensource: ferramentas para desenvolvimento rápido de aplicações Web
PPTX
PHP 10 CodeIgniter
PDF
PHPZEIRO: Adote um framework
PPTX
PDF
DETRAN MAIS FÁCIL: CONSTRUÇÃO DE APP WEB USANDO O FRAMEWORK ÁGIL YII
PDF
Python mudando o modo de desenvolver para a web - Marcos Daniel Petry
PDF
Python mudando o modo de desenvolver para a internet
PDF
PHP, Mercado e Certificações
PDF
Frameworks PHP
PPTX
Infoeste 2014 - Desenvolvimento de um CMS com Codeigniter Framework(PHP)
PDF
CakePHP - Aprendendo a fazer o primeiro bolo
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web Avançado usando PHP
Desenvolvimento Web com CakePHP
PHP Turbinado com CodeIgniter - Conisli 2011
Frameworks de Desenvolvimento Web com PHP
Serversidephp pptx2-120418140114-phpapp01
Slide Aula - Curso CakePHP
XPT Framework
Palestra Ruby on Rails SETA 2008/01
Frameworks Opensource: ferramentas para desenvolvimento rápido de aplicações Web
PHP 10 CodeIgniter
PHPZEIRO: Adote um framework
DETRAN MAIS FÁCIL: CONSTRUÇÃO DE APP WEB USANDO O FRAMEWORK ÁGIL YII
Python mudando o modo de desenvolver para a web - Marcos Daniel Petry
Python mudando o modo de desenvolver para a internet
PHP, Mercado e Certificações
Frameworks PHP
Infoeste 2014 - Desenvolvimento de um CMS com Codeigniter Framework(PHP)
CakePHP - Aprendendo a fazer o primeiro bolo

Mais de Lucas Augusto Carvalho (14)

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

Último (19)

PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PPTX
Aula 18 - Manipulacao De Arquivos python
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
Apple Pippin Uma breve introdução. - David Glotz
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PDF
Processos na gestão de transportes, TM100 Col18
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Aula 18 - Manipulacao De Arquivos python
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Custos e liquidação no SAP Transportation Management, TM130 Col18
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
COBITxITIL-Entenda as diferença em uso governança TI
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Apple Pippin Uma breve introdução. - David Glotz
Aula04-Academia Heri- Tecnologia Geral 2025
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Processos na gestão de transportes, TM100 Col18
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...

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