Ademir Cristiano Gabardo. Novatec

Documentos relacionados
Ademir Cristiano Gabardo. Novatec

Criando Relatórios com PHP Pablo Dall Oglio

Web Interativa com Ajax e PHP

André Gugliotti. Novatec

Programando para. iphone e ipad. Aprenda a construir aplicativos para o ios. André Milani. Novatec

Hélio Engholm Jr. Novatec

Sumário. Parte I Elementos essenciais Sobre o autor Sobre o revisor técnico Prefácio... 14

Pedro Monteiro da Silva Eleutério Marcio Pereira Machado. Novatec

Desenvolvendo Websites com PHP

Blender 3D jogos e animações interativas Allan Brito

Rodrigo de Barros Paes

Criando Aplicações PHP com. Zend e Dojo. Flávio Gomes da Silva Lisboa. Novatec

Sérgio de Oliveira. Novatec

Expressões Regulares Cookbook Jan Goyvaerts Steven Levithan

Editor: Rubens Prates PY Editoração eletrônica: Carolina Kuwabata Revisão gramatical: Patrizia Zagni Capa: Edinei Gonçalves/Carolina Kuwabata

Arduino Básico Michael McRoberts

Guia Mangá. Álgebra Linear. Shin Takahashi, Iroha Inoue e Trend-Pro Co., Ltd. novatec

Zend. Framework. Componentes Poderosos para PHP. Flávio Gomes da Silva Lisboa. Novatec

Benjamin Bengfort Jenny Kim

ADIANTI FRAMEWORK PARA PHP

Primeiros Passos com o Arduino Massimo Banzi

Ademir C. Gabardo. Novatec

Segurança em Redes sem Fio

WordPress 3 Básico Stephanie Leary

2ª edição. Daniel Adorno Gomes. Novatec

Desenvolvendo Websites com PHP

Desenvolvimento de Grandes Aplicações Web

Criando Relatórios com PHP

Guia Mangá Circuitos Eletrônicos

Primeiros Passos com o Arduino

Allen B. Downey. Novatec

Daniel Moreno. Novatec

Primeiros Passos com Sensores Kimmo Karvinen Tero Karvinen

A Arte de Escrever Programas Legíveis

3ª EDIÇÃO Gilleanes T. A. Guedes

2ª Edição Décio Heinzelmann Luckow Alexandre Altair de Melo

Introdução à Programação com Python

Introdução ao Zend Framework 2

Novatec Editora Ltda

Lojas Virtuais com. Magento. André Nobrega Gugliotti. Novatec

Aravind Shenoy Anirudh Prabhu

Desenvolvendo Websites com PHP

Allan Liska e Timothy Gallo. Novatec

Copyright 2008, 2013 da Novatec Editora Ltda.

Jessey Bullock Jeff T. Parker

Jonathan Weber e a equipe da LunaMetrics

Daniel Marcos Cunha Pereira

Guia Mangá Motores elétricos

Guia Prático Richard E. Silverman

marketing ágil Utilização de Metodologias Ágeis em Projetos de Marketing Michelle Accardi-Petersen Novatec

Ricardo R. Lecheta. Novatec

ALUNO: RONI FABIO BANASZEWSKI

Guia Mangá Circuitos Eletrônicos

Simon Holmes. Novatec

Introdução à Programação com Python

Criando Aplicações Gráficas com PHP

Jonathan Stark Brian Jepson

Google Analytics Justin Cutroni

Julia Elman e Mark Lavin. Novatec

O CMS JOOMLA! UM GUIA PARA INICIANTES

Kenneth Reitz Tanya Schlusser

Design Centrado no Usuário

Novatec Editora Ltda

Laboratórios de Tecnologias. Cisco. em Infraestrutura de Redes. Samuel Henrique Bucke Brito. Novatec

Sistema de Informação e Coordenação - SIC

arquitetura shared-nothing em 3 camadas

Padrões de Projeto em PHP

Shelley Powers. Novatec

Ricardo Kléber M. Galvão. Novatec

2ª EDIÇÃO. André Milani. Novatec

André Gugliotti. Novatec

Allan Liska Geoffrey Stowe

Luiz Carlos Querino Filho

Protótipo de uma ferramenta de apoio para desenvolvimento de sistemas web para WebIntegrator

David Hows Peter Membrey Eelco Plugge

PDF Explicado John Whitington

Continuação... Criando a Interface e adiante

2ª Edição Alexandre Keller

Google Android para Tablets

Paulo Strelczuk. Novatec

Rails 3 Básico Cloves Carneiro Jr. Rida Al Barazi

Google Android para Tablets

Editor: Rubens Prates Revisão gramatical: Marta Almeida de Sá Editoração eletrônica: Carolina Kuwabata Assistente editorial: Priscila A.

De Olho na Pista. Documento de Arquitetura. De Olho na Pista Documento de Arquitetura Data: 23/03/2013. AJA Software

Ricardo R. Lecheta. Novatec

Scrum em Ação. Gerenciamento e Desenvolvimento Ágil de Projetos de Software. Andrew Pham Phuong-Van Pham. Novatec

Primeiros Passos com o Raspberry Pi

Programação Java. em Ambiente Distribuído. Ênfase no Mapeamento Objeto-Relacional com JPA, EJB e Hibernate. Douglas Rocha Mendes.

Programação Java para a Web Décio Heinzelmann Luckow Alexandre Altair de Melo

Aprenda a Programar com Minecraft

Novatec Editora Ltda. 2014, 2016.

Pramod J. Sadalage Martin Fowler

3 a edição. Walter Cybis Adriana Holtz Betiol Richard Faust. Novatec

Service Desk Corporativo

Gerência de Dispositivos. Adão de Melo Neto

Adrian Mejia. Novatec

MAPEAMENTO OBJETO RELACIONAL COM HIBERNATE EM APLICAÇÕES JAVA WEB

Wilson Moraes Góes. Novatec

Transcrição:

Ademir Cristiano Gabardo Novatec

Novatec Editora Ltda. 2012. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução desta obra, mesmo parcial, por qualquer processo, sem prévia autorização, por escrito, do autor e da Editora. Editor: Rubens Prates Capa: Ademir Gabardo/Carolina Kuwabata Revisão gramatical: Giacomo Leone Neto Editoração eletrônica: Carolina Kuwabata ISBN: 978-85-7522-333-8 Histórico de impressões: Novembro/2012 Primeira edição Novatec Editora Ltda. Rua Luís Antônio dos Santos 110 02460-000 São Paulo, SP Brasil Tel.: +55 11 2959-6529 Fax: +55 11 2950-8869 E-mail: novatec@novatec.com.br Site: www.novatec.com.br Twitter: twitter.com/novateceditora Facebook: facebook.com/novatec LinkedIn: linkedin.com/in/novatec Dados Internacionais de Catalogação na Publicação (CIP) (Câmara Brasileira do Livro, SP, Brasil) Gabardo, Ademir Cristiano PHP e MVC : com codelgniter / Ademir Cristiano Gabardo. -- São Paulo : Novatec Editora, 2012. Bibliografia. ISBN 978-85-7522-333-8 1. Aplicação de programa - Desenvolvimento 2. PHP (Linguagem de programação para computadores) 3. Programação orientada para o objeto (Ciência da computação) 4. Sistemas - Desenvolvimento 5. Web MVC (Aplicação) I. Título. 12-13185 CDD-004.21 Índices para catálogo sistemático: 1. PHP e MVC : Sistemas : Desenvolvimento : Ciências da computação 004.21 MP20121023

capítulo 1 Padrão MVC (Model, View, Controller) 1.1 O que é MVC? Se você leu o livro CodeIgniter Framework PHP, de minha autoria, publicado em 2010, encontrou referência à MVC como um design pattern. Pesquisando pelo termo na internet, várias ocorrências irão apontar MVC como um padrão de design de software. E tantas outras como um padrão de design de projetos. Para que fique claro. MVC é um padrão de design de projetos de software que separa as camadas de lógica e negócio da camada de apresentação. O MVC foi originalmente concebido na Xerox PARC entre 1978 e 1979 e mais tarde implementado na biblioteca de classe Samalltalk-80 (Hemrajani 2007). Quando MVC é referenciado como um design pattern ou padrão de design de software, isso ocorre porque MVC vem sendo adotado como solução recorrente para um problema conhecido, uma solução reutilizável. Essa possibilidade de utilizar um mesmo modelo de desenvolvimento para diversos problemas distintos acabou fazendo com que muitas pessoas apontassem MVC como um design pattern. Um framework de certo modo também tem essa característica por servir de base para vários projetos distintos. Você não precisa escrever uma classe de conexão a dados para cada novo website ou sistema que cria, porque isso já está escrito no framework. Assim, basta reutilizar a solução já desenvolvida, testada e conhecida. Uma vez esclarecido esse equivoco, vamos à prática. MVC é uma solução para desacoplar as camadas de lógica e regras de negócio da camada de apresentação. Implementa três camadas distintas, sendo elas Model, 18

Capítulo 1 Padrão MVC (Model, View, Controller) 19 View e Controller, cada qual com suas características e atribuições em uma aplicação. 1.2 Model Os models ou modelos são os componentes da camada de abstração de dados. Cada model é uma classe que herda as propriedades da superclasse model do framework e que, dessa forma, tem as características e comportamentos da superclasse. O mais comum na utilização prática dos models é que a eles sejam atribuídas as tarefas de gravar e recuperar dados do banco de dados, muito embora haja outras maneiras para executar essa tarefa, assunto que será abordado na segunda parte do livro em que construiremos um catálogo de produtos e um carrinho de compras. Para exemplificar, imagine a classe que define uma pessoa com seus atributos e métodos. O model será a classe responsável pela estrutura que define um objeto do tipo pessoa, por exemplo, um método para gravar as informações sobre uma pessoa no banco de dados. gravar_pessoa_no_db() { } Pensando ainda em models, imaginemos uma aplicação semelhante, que deva gerenciar pessoas, mas na qual não trabalhamos com bancos de dados e em que os dados são gravados em arquivos de texto. O model, da mesma maneira é responsável por guardar a estrutura que define um objeto do tipo pessoa com seus atributos e métodos. Ao criar um novo objeto do tipo pessoa, podemos ter um método que retorna o objeto como um todo para um controlador que escreverá o arquivo com os dados recebidos do modelo em um arquivo físico no disco. Essa abordagem de estruturação dos objetos também facilita a integração entre sistemas baseados em bancos de dados e bibliotecas ou softwares ORM ou Mapeamento Objeto-Relacional, que faz o mapeamento das entidades do banco de dados, gerando classes capazes de executar tarefas de rotina, como inserções e leituras dessas entidades, podendo haver associações entre elas, gerando um ambiente complexo de manipulação de dados de maneira automatizada. Tudo isso parece complexo em um primeiro momento, mas na prática é muito simples.

20 PHP e MVC com CodeIgniter 1.3 View As views são a principal parte da camada de apresentação. Elas recebem dados dos controllers e não deverão se comunicar diretamente com os models ou com bancos de dados, nem deverão enviar dados diretamente para models ou bancos de dados. Views basicamente são arquivos.html ou.php, contendo estruturas HTML, XHTML ou HTML5 e outros formatos de saída,que apresentarão os dados gerados pela aplicação para o usuário. O CodeIgniter é bastante flexível quanto à camada de apresentação, podendo utilizar HTML puro mesclado a blocos de código PHP, templates baseadas em sua própria classe template parser ou ainda template engines de terceiros. Abordaremos mais detalhes sobre as views na seção 5.1.3. 1.4 Controller Os controllers são a camada responsável pela comunicação entre a camada de dados e abstração (models) e a camada de apresentação (views). Os controllers também são responsáveis por carregar os models e views, receber informações e validá-las antes de encaminhar ao model etc. Um controller é uma classe que herda as propriedades da classe ascendente, que é o controller do framework. Sempre que estamos acessando uma URL, obrigatoriamente estamos acessando um método de um controlador. Todo website ou aplicação possui um controlador-padrão definido no arquivo de configuração application/config/routes.php. Esse é o controlador que será carregado por padrão sempre que o website ou a aplicação for acessado. Veremos mais sobre rotas no capítulo 18. Quando acessamos uma URL diferente do domínio raiz da aplicação, estamos apontando para um método de um controlador, por exemplo, ao acessar a URL http://www.meusite.com.br/produtos/avaliar, significa que estamos acessando o controlador (classe) produtos{} e o método avaliar().

Capítulo 1 Padrão MVC (Model, View, Controller) 21 Os controllers são estruturados de modo a executar o método-padrão index() que será executado sempre que um controller for acessado a menos que outro método seja indicado na URL. 1.5 Como tudo isso funciona? O framework está estruturado de modo a fazer a comunicação entre as camadas da forma mais simples possível. Passando dados de uma camada para outra pelo uso de arrays, arrays multidimensionais ou objetos. Observe na figura 1.1 como é a estrutura MVC e o fluxo de dados entre suas camadas. Figura 1.1 Fluxo de dados MVC com CodeIgniter. Observando a figura, nota-se que a camada do controlador é responsável por receber, processar e retornar dados para as views. Quando o cliente (Navegador) faz uma requisição HTTP para o servidor web, este propaga a requisição para o arquivo index.php, que é o arquivo responsável por processar a requisição. O framework irá então verificar se existe alguma rota correspondente à requisição encaminhada e a informação em cache e disparar a requisição para o controller correspondente. O controller, por sua vez, irá processar a informação, se necessário, requisitar ou enviar informações a um model e então carregar uma view que poderá receber ou não informações vindas do controller e exibir essa view no browser.

22 PHP e MVC com CodeIgniter No modelo MVC, adotado pelo CodeIgniter, é possível criar aplicações inteiras, incluindo a utilização de bancos de dados sem utilizar models, apesar de essa abordagem não ser a mais recomendada. Na figura 1.1 é mostrada uma ligação entre controller e banco de dados pelo uso de uma classe chamada Active Record capaz de inserir, alterar e consultar dados diretamente de um controller. O Active Record será abordado na seção 10.3.