Palestra realizada em abril de 2009 no FLISOL de Aracaju/Sergipe. O tema foi o framework orientado a objetos em PHP chamado Symfony.
Algumas de suas features:
- utiliza a arquitetura MVC (Model View Controller), isto é, separação das camadas de apresentação, controle e modelo.
- utiliza bastantes componentes independentes como o Doctrine e Propel (ORM), YML (arquivos de configuração) e outros. Que podem ser adotados em outros projetos que não utilizam o Symfony.
- possui geração automática de CRUD (create, retrieve, update, delete)
- possui uma documentação e comunidade muito grandes.
- geração automática de telas de administração
- ambiente de desenvolvimento com debug
- ambiente de teste
- integração com sincronizador de arquivos (para atualização do projeto na produção)
- separação de configuração para ambientes de teste, desenvolvimento e produção.
- e muito mais...
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
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
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.
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.
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.
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.
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.')),
));
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.
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
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
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
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