O que é um framework?



Documentos relacionados
Ambiente Web PHP Problemas Frameworks CakePHP Symfony Zend Framework Prado CodeIgniter Demonstração

Ambiente Web PHP Problemas Frameworks CakePHP Symfony Zend Framework Prado CodeIgniter Demonstração O livro

Módulo 5 JPATransaction Camadas Turma Turma TurmaBC TurmaBC TurmaBC TurmaBC

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo

Programando em PHP. Conceitos Básicos

Curso de Aprendizado Industrial Desenvolvedor WEB

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS

Drupal. Desenvolvimento de Módulos

4 O Workflow e a Máquina de Regras

Sumário. Parte I Introdução Introdução O Rails é ágil Explorando o conteúdo Agradecimentos... 19

DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES

CONTRA CONTROLE DE ACESSOS E MODULARIZADOR DE SISTEMAS

Frameworks - Grails. Aécio Costa

Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões. Prof. MSc. Hugo Souza

Autor: Ricardo Francisco Minzé Júnior - ricardominze@yahoo.com.br Desenvolvendo aplicações em camadas com PHP 5.

ANEXO 11. Framework é um conjunto de classes que colaboram para realizar uma responsabilidade para um domínio de um subsistema da aplicação.

Scriptlets e Formulários

Começando com Ruby on

Sisorc. Tutorial de Criação de Novos Módulos

Capítulo 04: Persistência com SQLite

Prova de pré-requisito

CONCEITOS INICIAIS. Agenda A diferença entre páginas Web, Home Page e apresentação Web;

J550 Segurança e Controle de erros

MPOG EVOLUÇÃO DO PORTAL DO SOFTWARE PÚBLICO

3. Explique o motivo pelo qual os protocolos UDP e TCP acrescentam a informação das portas (TSAP) de origem e de destino em seu cabeçalho.

Desenvolvimento de Aplicações para Internet Aula 8

SISTEMAS OPERACIONAIS LIVRES. Professor Carlos Muniz

4. Qual seria o impacto da escolha de uma chave que possua letras repetidas em uma cifra de transposição?

Mais sobre uso de formulários Site sem Ajax

Arquitetura de Redes: Camadas de Protocolos (Parte I) Prof. Eduardo

PROJETO PEDAGÓGICO DE CURSOS

Formulário (Send & Recieve) Prof. Celso H. Masotti

Escrito por Sáb, 15 de Outubro de :19 - Última atualização Seg, 26 de Março de :32

NetEye Guia de Instalação

1 Criar uma entity a partir de uma web application que usa a Framework JavaServer Faces (JSF)

Vamos criar uma nova Página chamada Serviços. Clique em Adicionar Nova.

Aplicativo web para definição do modelo lógico no projeto de banco de dados relacional

UFG - Instituto de Informática

Parte I. Demoiselle Mail

Rede de Laboratórios de Produtividade de Software

Outlook XML Reader Versão Manual de Instalação e Demonstração UNE Tecnologia

Luiz Arão Araújo Carvalho Bacharel em Ciência da Computação Desenvolvedor RedeSat-TO

Sistemas para internet e software livre

Tecnologias Web. Padrões de Projeto - Camada de Apresentação

Orientações para o uso do Mozilla Thunderbird

Bem vindo! Esta é a tela inicial do Webmail da Universidade federal de Juiz de Fora. O link de acesso é:

WEBDESIGN. Professor: Paulo Marcos Trentin - paulo@paulotrentin.com.br Escola CDI de Videira

Manual do Painel Administrativo

Manual de Utilização do Zimbra

Programação Web Prof. Wladimir

Documento de Projeto de Sistema

WebApps em Java com uso de Frameworks

Introdução ao Sistema. Características

SISTEMA DE WORKFLOW PARA MODELAGEM E EXECUÇÃO DE PROCESSOS DE SOFTWARE. Aluno: Roberto Reinert Orientador: Everaldo A. Grahl

USANDO O IZCODE PARA GERAR SOFTWARE RAPIDAMENTE

Engenharia de Software III

Aula 03 - Projeto Java Web

Introdução ao PHP. Prof. Késsia Marchi

2 echo "PHP e outros.";

Conceitos de Ajax Exemplos de uso do Ajax no braço, muitos exemplos, muito código (HTML, CSS, JavaScript, PHP, XML, JSON)


WF Processos. Manual de Instruções

PHP Profissional. Alexandre Altair de Melo Mauricio G. F. Nascimento


Segurança em aplicações web: pequenas ideias, grandes resultados Prof. Alex Camargo

ASP.NET MVC em Ação. Jeffrey Palermo Ben Scheirman Jimmy Bogard. Novatec. Prefácio de Phil Haack

4 Desenvolvimento da ferramenta

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS ARMAZENAMENTO EM BD NO DM. Prof. Angelo Augusto Frozza, M.Sc.

Sumário. Capítulo 1 O que é o PHP? Capítulo 2 Instalação do PHP Capítulo 3 Noções básicas de programação... 25

Módulo Básico. Assando Sites. Relacionamentos, Validação, Consultas e Páginas Dinâmicas. Assando Sites

JavaScript (Funções, Eventos e Manipulação de Formulários)

Sistemas Distribuídos

Conectar diferentes pesquisas na internet por um menu

INTRODUÇÃO À TECNOLOGIA SERVLETS

Manual de Integração Via Gadget. Passo a passo para realizar a integração entre websites e a plataforma Virtual Target.

SERVIDOR WEB - APACHE SERVIDOR WEB - APACHE SERVIDOR WEB - APACHE 27/02/2012

Fonte: - Illustration by Gaich Muramatsu

Linguagem de. Aula 06. Profa Cristiane Koehler

Web Services. Autor: Rômulo Rosa Furtado

BANCO DE DADOS CONTEÚDO INFORMÁTICA. Prof.: MARCIO HOLLWEG BANCO DE DADOS SGBD TABELA CONCEITOS BÁSICOS

Microsoft Office Outlook Web Access ABYARAIMOVEIS.COM.BR

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS ARMAZENAMENTO EM BD NO DM. Prof. Angelo Augusto Frozza, M.Sc.

Vamos iniciar a nossa exploração do HTTP baixando um arquivo em HTML simples - bastante pequeno, que não contém objetos incluídos.

Programação Orientada a Objetos com PHP & MySQL Sistema Gerenciador de Banco de Dados: Introdução e configuração de bases de dados com Postgre e MySQL

Elaborado por SIGA-EPT. Projeto SIGA-EPT: Manual do Usuário Almoxarifado

Gerenciamento de Arquivos e Pastas. Professor: Jeferson Machado Cordini jmcordini@hotmail.com

Programação Web com PHP. Prof. Wylliams Barbosa Santos Optativa IV Projetos de Sistemas Web

Manual de Operação do Sistema de Tickets Support Suite

American Work Guia de Primeiros Passos

- Acessar o sistema. Para acessar o sistema digite o endereço eletronico e clique em login na barra de menus.

Guia do Demoiselle Audit Demoiselle Audit Paulo Gladson Ximenes Pinheiro Clóvis Lemes Ferreira Júnior

Podemos também definir o conteúdo dos menus da página inicial. Clique em Menus, Main Menu.

Redes de Computadores Camada de Aplicação. Prof. MSc. Hugo Souza

PÓS-GRADUAÇÃO EM MATEMÁTICA COMPUTACIONAL INFORMÁTICA INSTRUMENTAL

Transcrição:

O que é um framework? Um framework, ou arcabouço, em desenvolvimento de software, é uma abstração que une códigos comuns entre vários projetos de software provendo uma funcionalidade genérica. (Wikipedia)

Porque devo usar um framework? Não reinventar a roda Focar nas regras de negócios da aplicação Manutenibilidade Escalabilidade

Como escolher um framework? Popularidade Comunidade Suporte Boas práticas de desenvolvimento Segurança Documentação Licensa

Porque escolher o Symfony2? Reconhecido internacionalmente Comunidade ativa Suporte por 3 anos Padrões de projeto,... Serviços de segurança (Security) Boa documentação (ainda em avanço) Licensa MIT

Mas o que são Padrões de Projeto? Soluções para problemas recorrentes Solução reutilizável (reuso de idéias) Propostos por projetistas OO experientes

Padrões de Projeto presentes no Symfony2 MVC Dependency Injection Decorator Singleton Chains Of Responsability

MVC (Modelo, Visão, Controlador) Padrão de arquitetura de software Separar regras de negócios da apresentação Permite o desenvolvimento isolado de ambos Baixo acoplamento entre as partes

(M) Modelo Define o dominio da aplicação Acesso a dados Exemplo Aplicação: Blog Dominio: Post, Tag, Categoria, Usuario

(V) Visão Apresentação dos dados Formatos HTML RSS XML JSON Outros dispositivos, móveis por exemplo

(C) Controlador Independente do modelo Independente da apresentação Responsável por receber uma requisição e responder Papel de cola entre modelo e apresentação

Injeção de Dependencias Reduzir o acoplamento entre componentes de software Objetos dependem de outras partes da aplicação Retira a responsabilidade dos objetos de saber como outras partes da aplicação funcionam As dependencias serão injetadas seguindo um contrato Exemplo: Criação e obtenção de serviços

Decorator Alternativa mais flexível ao uso de herança Adicionar funcionalidades a uma classe dinamicamente Exemplo: Engine de templates do Symfony2 (Twig)

O protocolo HTTP Permite que duas máquinas se comuniquem por meio de mensagens Dois atores: cliente e servidor Cliente envia uma requisição(mensagem) para o servidor Servidor entende a requisição e retorna uma resposta(mensagem) para o cliente

Estrutura de arquivos do Symfony2 www/ Symfony/ app/ cache/ config/ logs/ Resources/ bin/ src/ Acme/ DemoBundle/ Controller/ Resources/... vendor/ symfony/ doctrine/... web/ app.php... app/ src/ vendor/ web/ Configurações relacionadas a aplicação como um todo, caches, logs, registro de bundles ativos,... Contém todo código PHP da aplicação além de templates, configurações, organizados por bundles Bundles que compõe o core do framework e os desenvolvidos por terceiros. Todos os arquivos públicos, ou seja, que podem ser acessados diretamente pelo cliente. Além disso, tem os arquivos app.php e app_dev.php que são front controllers do Symfony2.

Características do Symfony2 Convenção por configuração Ambientes de desenvolvimento Produção (app.php) Desenvolvimento (app_dev.php) Testes

O Sistema de Bundles Um bundle é um conjunto estruturado de arquivos que implementam uma funcionalidade única, um blog por exemplo Um bundle contém tudo relacionado a funcionalidade que ele implementa como códigos PHP, configurações, templates, testes,... Podem ser compartilhados com outras aplicações, por exemplo um bundle de gerenciamento de usuários

Criando Bundles Criados na pasta src/ Boas práticas para nome Usar apenas caracteres alfanuméricos e underscore CamelCase Descritivo com no máximo 2 palavras Prefixado com o nome do criador Sufixado com Bundle Exemplos: AcmeBlogBundle, AcmeForumBundle Comando php app/console generate:bundle --namespace=acme/blogbundle

Criando um Controlador Nome: UsuarioController Herda da classe Controller ou ContainerAware Coleção de ações public function indexaction() {... } public function exibiraction(usuario $usuario) { }

Exemplo ( ) class UsuarioController extends Controller { public function indexaction() { return new Response('Hello World!!!'); } } public function helloaction($nome) { return new Response(sprintf('Hello %s!!!', $nome)); }

O Sistema de Roteamento Associa padrões de URL's a controladores Permite configuração por Anotação, YML, XML e PHP Vamos utilizar configuração por Anotação

Exemplo ( ) use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; ( ) /** * @Route( /, name= usuario_index ) */ public function indexaction() {... } /** * @Route( /hello/{nome}, name= usuario_hello,requirements={ nome = \w+ }) */ public function helloaction($nome) {... } /** * @Route( /exibir/{id}, name= usuario_exibir, requirements={ id = \d+ }) */ public function exibiraction(usuario $usuario) { }

GET / HTTP/1.1 Host: blog.com Accept: text/html User-Agent: Mozilla/5.0

GET /hello/marcus Henrique HTTP/1.1 Host: blog.com Accept: text/html User-Agent: Mozilla/5.0

GET /exibir/1 HTTP/1.1 Host: blog.com Accept: text/html User-Agent: Mozilla/5.0

Acesso a Dados (Modelo) Symfony2 não provê acesso a dados em banco Utiliza o framework Doctrine2

Doctrine2 Mapeamento Objeto-Relacional Abstrai informações do SGBD utilizado Abstrai os tipos de dados do SGBD Utiliza DQL para abstrair a SQL utilizada pelo SGBD

Entidades Localizadas na pasta Entity/ do bundle Classes simples que manipulam dados Persistidas e obtidas do banco de dados Comando para criar entidades php app/console doctrine:generate:entity --entity=acmeblogbundle:usuario Comando para gerar GETTERS e SETTERS php app/console doctrine:generate:entities AcmeBlogBundle php app/console doctrine:generate:entities AcmeBlogBundle:Usuario

Exemplo use Doctrine\ORM\Mapping as ORM; /** * Acme\DemoBundle\Entity\Usuario * * @ORM\Table() * @ORM\Entity */ class Usuario { /** * @var integer $id * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var string $nome * @ORM\Column(name="nome", type="string", length=100) */ private $nome;

Exemplo (Relacionamento) > Entity/Usuario.php (...) /** * @var ArrayCollection $posts * @OneToMany(targetEntity="Post", mappedby="autor") */ private $posts; public function construct() { $this->posts = new ArrayCollection(); } > Entity/Post.php (...) /** * @var Usuario $autor * @ORM\ManyToOne(targetEntity="Usuario", inversedby="posts") * @ORM\JoinColumn(name="autor", referencedcolumnname="id", nullable=false) */ private $autor;

Exemplo (Persistência) > Controller/UsuarioController (...) use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; /** * @Route( /salvar, name= usuario_salvar ) * @Method( POST ) */ public function salvaraction() { $usuario = new Usuario(); ( ) $em = $this->getdoctrine()->getentitymanager(); $em->persist($usuario); $em->flush(); (...) }

Forms Lidar com formulários HTML é muito comum no desenvolvimento de aplicações web Tratar dados vindos de um POST de um formulário Gerar visualização do formulário Reutilização de código Comando php app/console generate:doctrine:form AcmeBlogBundle

Exemplo 1 > Contrroller/UsuarioController ( ) public function salvaraction() { $usuario = new Usuario(); $requisicao = $this->getrequest(); ( ) $form = $this->createformbuilder($usuario) ->add('nome') ->add('email', 'e-mail') ->getform(); If ($requisicao->getmethod() === 'POST') { $form->bindrequest($requisicao); If ($form->isvalid()) { // Persistir entidade. // Direcionar para outra página. } } } // Exibir o formulário com erros e dados preenchidos se tiverem. (...)

Exemplo 2 > Contrroller/UsuarioController ( ) public function salvaraction() { $usuario = new Usuario(); $requisicao = $this->getrequest(); ( ) $form = $this->createform(new UsuarioType(), $usuario); If ($requisicao->getmethod() === 'POST') { $form->bindrequest($requisicao); If ($form->isvalid()) { // Persistir entidade. // Direcionar para outra página. } } } // Exibir o formulário com erros e dados preenchidos se tiverem. (...)

Exemplo 2 (UsuarioType) > Form/UsuarioType ( ) use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilder; class UsuarioType extends AbstractType { public function buildform(formbuilder $builder, array $options) { $builder->add('nome'); $builder->add('email', 'email'); $builder->add('login'); $builder->add('senha', 'repeated', array( 'type' => 'password', 'first_name' => 'Digite seu senha, 'second_name' => 'Confirme sua senha', 'invalid_message' => 'Por favor, confirme sua senha.' )); } } public function getname() { return 'usuario'; }

Twig Linguagem de templates Diversos filtros prontos para uso Extensível Utiliza o padrão Decorator Templates em Resources/views/{Controller}/ {Action}.twig.html {Controller} é o nome do controlador sem Controller {Action} é o nome da ação sem Action

Exemplo > Resources/views/Usuario/hello.html.twig {% extends "AcmeDemoBundle::layout.html.twig" %} {% block title "Hello " ~ name %} {% block content %} <h1>hello {{ name }}!</h1> {% endblock %}

Twig (Tipos sintaticos especiais) {{ }} Diz algo : imprime uma variável ou expressão {% %} Faz algo : controla a lógica do template Executa alguma instrução

Exemplo (Listagem de Usuários) > Resources/views/Usuario/index.html.twig {% extends 'AcmeBlogBundle::layout.html.twig' %} {% block title 'Listagem de Usuários' %} {% block content %} {% for usuario in usuarios %} {{ usuario.nome }} - {{ usuario.email }} {% if usuario.ativo %} - Inativo {% endif %} {% endfor %} {% endblock %}

CRUD Create, Retrieve, Update e Delete Operações básicas em bancos de dados relacionais Gerador de CRUD do Symfony2 Bom para prototipação Comando php app/console generate:doctrine:crud --entity=acmeblogbundle

Segurança (Symfony2 Security) Processo de 2 passos Autenticação Autorização Evitar que usuários acessem recursos que eles não tem acesso

Autenticação Primeiro passo do processo O sistema está tentando descobrir quem é você

Autorização Segundo passo do processo Agora o sistema já sabe quem é você Próximo passo: determinar se você tem acesso ao recurso

Roles Indicam os papéis que um usuário tem na aplicação Serão utilizadas como permissões Podem ser organizadas hierarquicamente Podem ser criadas a qualquer momento seguindo a convenção ROLE_* Exemplos: ROLE_USER, ROLE_ADMIN, ROLE_SUPER_ADMIN,...

Dúvidas?

http://symfony.com/