Вы находитесь на странице: 1из 12

4.

8 Model-View-Controller (MVC)

4Linux www.4linux.com.br

4.8 Model-View-Controller (MVC)


O Model-View-Controller, ou MVC, um design pattern que prope uma arquitetura padro para aplicaes web, separando o sistema em trs grandes partes: Model: responsvel pelas regras de negcio e informaes de sua aplicao View: responsvel por apresentar as informaes da aplicao Controller: responsvel por entender o que a aplicao deve fazer, direcionando para o Model ou para a View

Diferente dos outros design patterns que vimos, o MVC no segue uma estrutura padro ou implementao especca. Cham-lo de paradigma ou conceito seria mais apropriado. Este conceito consiste da relao entre trs objetos: o Model, a View

Pgina 50

Desenvolvimento Orientado a Objetos com PHP

4Linux www.4linux.com.br

4.8 Model-View-Controller (MVC)

e o Controller. O Controller e a View dependem do Model, porque ambos podem pedir dados do Model. Qualquer entrada no seu sistema, em forma de pedido HTTP, interpretada pelo Controller, que seleciona a View para mostrar resultados, mas consulta antes o Model para processar os dados. A View tambm pode consultar o Model neste momento, antes de enviar a resposta HTTP. No exemplo abaixo, temos um pequeno MVC. Ele interpreta uma chamada HTTP GET e, dependendo do valor da varivel action passada pela URL, o Controller ir chamar um mtodo especco de nosso Model. Uma vez processadas as informaes, o Controller pega as informaes do Model e passa para a View correta, que traz a resposta HTTP. exemplos/patterns/mvc/Model.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

<? php class Model { public function getContent () { return array ( conteudo => duadsuadsioiuads ); } public function getPost ( $id ) { return array ( titulo => " Post $id " , conteudo => duazxczczcxuads ); } }

exemplos/patterns/mvc/View.php
1 2 3 4 5 6

<? php class View { public function load ( $file , $data = null ) { include (" view / $file "); }

Desenvolvimento Orientado a Objetos com PHP

Pgina 51

4.8 Model-View-Controller (MVC)


7

4Linux www.4linux.com.br

exemplos/patterns/mvc/Controller.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

<? php class Controller { public $view ; public $model ; public function __construct () { $this -> view = new View ; $this -> model = new Model ; switch ( $_GET [ action ]) { case home : $this -> home () ; break ; case post : $this -> verPost ( $_GET [ id ]) ; break ; default : $this -> home () ; break ; } } public function home () { $data = $this -> model -> getContent () ; $this -> view -> load ( blog . php , $data ); } public function verPost ( $id ) { $data = $this -> model -> getPost ( $id ); $this -> view -> load ( post . php , $data ); }

Pgina 52

Desenvolvimento Orientado a Objetos com PHP

4Linux www.4linux.com.br
35

4.8 Model-View-Controller (MVC)

exemplos/patterns/mvc/view/blog.php
1 2 3 4 5 6 7 8 9 10

<! DOCTYPE html > <html > <head > < title > Meu Blog </ title > </ head > <body > <h1 > Bem vindo ao blog ! </ h1 > <? php echo $data [ conteudo ]; ?> </ body > </ html >

exemplos/patterns/mvc/view/post.php
1 2 3 4 5 6 7 8 9 10

<! DOCTYPE html > <html > <head > < title > Meu Blog </ title > </ head > <body > <h1 > <? php echo $data [ titulo ]; ? > </ h1 > <? php echo $data [ conteudo ]; ?> </ body > </ html >

Desenvolvimento Orientado a Objetos com PHP

Pgina 53

Captulo 5 SPL

5.1 O que a SPL?

A Standard PHP Library, ou SPL, uma biblioteca de classes e interfaces genricas que permitem que ns faamos uso completo das funcionalidades de programao orientada a objetos no PHP. A biblioteca cria uma API padro para certas funcionalidades nativas, permitindo que suas classes interajam com o PHP de uma maneira mais clara. Por exemplo, voc pode denir como seus objetos iro reagir quando forrem iterados com um foreach.

Grande parte da SPL composta por iteradores, mas ela tambm inclui classes e interfaces para facilitar a manipulao de arrays, gerenciamento de excees e carregamento automtico de classes, alm de novas estruturas de dados denidas como interfaces. Vamos conhecer essas e outras funcionalidades da SPL nas prximas pginas da apostila.

55

5.2 Iteradores

4Linux www.4linux.com.br

5.2 Iteradores
Qualquer coleo de objetos, como uma lista, deve proporcionar uma maneira de acessar todos os seus elementos sem ser necessrio a exposio de sua estrutura interna. Alm disso, tambm necessrio iterar na lista de diferentes maneiras, de acordo com o objetivo nal. Prover uma interface nica de iterao de colees de objetos importantssimo e isso que o design pattern Iterator permite que voc faa. Em resumo, a idia deste padro de projeto pegar toda a responsabilidade de acesso e iterao de um objeto agregado e coloc-la em um objeto que dene um protocolo nico de acesso e iterao. Esse objeto chamado de Iterator. Observe no exemplo abaixo a criao de um objeto que pode ser iterado como se fosse um array. As informaes que sero acessadas devem estar em uma propriedade da classe, e claro, precisam ser um array. Esta interface iteradora uma das grandes adies da SPL.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

<? php class Dados implements Iterator { private $dados ; private $indice = 0; public function __construct ( $dados ) { $this -> dados = $dados ; } public function rewind () { $this -> indice = 0; } public function valid () { return isset ( $this -> dados [ $this -> indice ]) ; }

Pgina 56

Desenvolvimento Orientado a Objetos com PHP

4Linux www.4linux.com.br
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

5.2 Iteradores

public function current () { return $this -> dados [ $this -> indice ]; } public function key () { return $this -> indice ; } public function next () { $this -> indice ++; } } $array = array (A , B , C , D ) ; $objeto = new Dados ( $array ); foreach ( $objeto as $chave => $valor ) { echo " $chave => $valor < br />"; }

5.2.1 ArrayAccess
A interface ArrayAccess da SPL permite que voc acesse um objeto como se ele fosse um array, acessando suas propriedades como se fossem ndices.

1 2 3 4 5

<? php class Livro implements ArrayAccess { public $titulo ; public $autor ;

Desenvolvimento Orientado a Objetos com PHP

Pgina 57

5.2 Iteradores
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

4Linux www.4linux.com.br

public function offsetExists ( $offset ) { return isset ( $this -> $offset ); } public function offsetSet ( $offset , $value ) { $this -> $offset = $value ; } public function offsetGet ( $offset ) { return $this -> $offset ; } public function offsetUnset ( $offset ) { unset ( $this -> $offset ); } } $livro = new Livro ; $livro [ titulo ]= PHP Ninja ; $livro [ autor ] = Klaus Silveira ; print_r ( $livro );

5.2.2 DirectoryIterator
Este iterador permite que voc itere em um diretrio, utilizando uma interface muito rica e, claro, orientada a objetos. Vamos dar uma olhada:

1 2 3 4 5

<? php $diretorio = new DirectoryIterator ( / home / aluno ) ; while ( $diretorio - > valid () ) {

Pgina 58

Desenvolvimento Orientado a Objetos com PHP

4Linux www.4linux.com.br
6 7 8

5.2 Iteradores

echo $diretorio -> getFilename () . < br / > ; $diretorio -> next () ; }

O DirectoryIterator tambm lana excees:

1 2 3 4 5 6 7 8 9 10 11

<? php try { $diretorio = new DirectoryIterator ( / home / aluno ) ; while ( $diretorio - > valid () ) { echo $diretorio -> getFilename () . < br / > ; $diretorio -> next () ; } } catch ( Exception $e ) { echo $e -> getMessage () ; }

Existem vrios mtodos teis para fazer a iterao de um diretrio: current: Retorna $this (necessrio para a interface Iterator) getATime: Retorna a data de ltimo acesso do arquivo getBasename: Get base name of current DirectoryIterator item. getCTime: Retorna a data de modicao do inode do arquivo getExtension: Returns the le extension component of path getFilename: Retorna o nome do arquivo do elemento atual do diretrio getGroup: Retorna o grupo do arquivo

Desenvolvimento Orientado a Objetos com PHP

Pgina 59

5.2 Iteradores

4Linux www.4linux.com.br

getInode: Retorna o inode do arquivo getMTime: Retorna a data da ltima modicao do arquivo getOwner: Retorna o proprietrio do arquivo getPath: Retorna o caminho do diretrio getPathname: Retorna o caminho e o nome do arquivo do elemento atual do diretrio getPerms: Retorna as permisses do arquivo getSize: Retorna o tamanho do arquivo getType: Retorna o tipo do arquivo isDir: Retorna true se o elemento atual um diretrio isDot: Retorna true se o elemento atual for . ou .. isExecutable: Retorna true se o arquivo for executvel isFile: Retorna true se o elemento atual for um arquivo isLink: Retorna true se o elemento atual for um link simblico isReadable: Retorna true se o arquivo pode ser lido isWritable: Retorna true se o arquivo pode ser modicado key: Retorna o elemento atual do diretrio next: Avana para o prximo elemento

Pgina 60

Desenvolvimento Orientado a Objetos com PHP

4Linux www.4linux.com.br

5.2 Iteradores

rewind: Recomea a iterao do diretrio seek: Procura um elemento valid: Verica se o diretrio possui ou no mais elementos

Desenvolvimento Orientado a Objetos com PHP

Pgina 61

Вам также может понравиться