stvkoch 0 Denunciar post Postado Janeiro 31, 2009 Viva, Neste artigo irei explicar como construir um framework que aulixilia a criação de webapps com Design Pattern MCV. Este framework é construído por um design pattern que chamarei de 'Spin Pattern'. Ele não tem tantos recursos comparado com outros frameworks por não ter a infinidade de arquivos adicionais que auxiliam algumas tarefas. Mas com o tempo, voce ira criando suas próprias bibliotecas auxiliares e adicionará ao seu framework Iremos nesta primeira parte nos concentramos no C e V. Controller e Visualização. Primeiro passo é criar um directorio onde guardará seu ficheiros. Para este projecto iremos chamar o directorio de 'snapsframework'. Criaremos nossa primeira classe chamada BaseController e a guardaremos em basecontroller.php. class BaseController{ //propriedade que guarda o nome do layout padrão public $layout = 'layout'; //propriedade que guarda o nome da action que é executada por default public $actiondefault = 'index'; //imprime o conteudo do controller function __construct(){ echo $this->{$this->layout}(); } //função que é sobrecarregada pelo mytemplate! Mais adiante iremos sobrecarrega-la public function layout(){ return $this->showcontent(); } //function que gera o conteudo da action public function showcontent(){ return $this->{$this->runaction()}(); } public function runaction(){ return (isset($_REQUEST['a'])) ? $_REQUEST['a'] : $this->actiondefault; } } Agora iremos construir o arquivo que receberá as requisições: o index.php Arquivo que recebe as requisições. index.php function __autoload($class_name) { require_once strtolower($class_name) . '.php'; } if(!isset($_REQUEST['c']) || $_REQUEST['c'] == null) $_REQUEST['c'] = 'home'; Cuidado, o __autoload pode abrir os controller passado pelo url, ou qualquer classe que exista. Por este motivo é verificado se $_REQUEST['c] é um controller if(file_exists(strtolower($_REQUEST['c']).'controller.php')){ require_once (strtolower($_REQUEST['c']).'controller.php'); $classe = ucfirst($_REQUEST['c']).'Controller'; $controler = new $classe; }else die($_REQUEST['c'] . ' Não há este controller.'); Agora o sistema esta funcionando e executando as solicitações de actions para seus controllers. Vamos criar nosso primeiro controller chamado HomeController e guarda-lo em homecontroller.php class HomeController extends BaseController{ public function index(){ return "Meu arquivo HOME executando a action INDEX"; } public function vamos(){ return 'OK----Vamos para a HOME!'; } } Se ires ao endereço: http://localhost/snapsframework/ ira executar a action index do controller home, se ires http://localhost/snapsframework/?a=vamos irá executar a action vamos do controller HomeController que é passado no index como controller default. O endereço completo da url é http://localhost/snapsframework/?c=home&a=vamos OK iremos agora para o View!! Crie uma nova classe chamada MyTemplate que será expandida pela BaseController. class MyTemplate extends BaseController{ //Posso renomear meu layout padrão, por exemplo para layout2 e o template chamado será o contido no método layout2() //$layout = "layout2"; public function layout(){ include('views/layout/template.php'); } public function layout2(){ include('views/layout/template2.php'); } } !!!Note que nosso método layout retorna um include chamado 'template.php' que esta dentro do directorio 'view/layout' Crie estes directórios e o arquivo template.php com o conteúdo(Poderia inserir o HTML dentro da função layout, mas não fica elegante): <code> <html> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8"> <title>My Template</title> </head> <body id="template"> <?php #pode incluir elementos usando include('views/elements/menu.php') ?> <!--Mas oque que é importante neste template é esta função $this->showcontent() que retorna os dados do action--> <?php echo $this->showcontent() ?> </body> </html> </code> Até ai, tudo bem, mas como nossas classes controller sabem qual o layout a usar? Para usarmos nosso template temos que expandir nossos controller por nosso template no caso de nosso HomeController ficaria assim: class HomeController extends MyTemplate{ //Posso alterar o layout padrão de meu MyTemplate //var $layout = 'layout2'; public function index(){ //... } public function vamos(){ //... } } Ai esta... Nosso CV de nosso framework MCV prontos. Iremos em breve tratar de nosso M, que será nosso modelo de acesso aos dados. há muitas coisas que poderiam expandir este framework, como adicionar um arquivo Rewrite para o Apache e um Mapper para tratar de nossas URLs a nivel do BaseController, mas para já fica fora do escopo deste artigo. O código pode ser visto em: http://github.com/stvkoch/snaps-framework/tree/master Qualquer dúvida entrem em contacto. Abraço ate mais. stevenkoch(at)surfih.com http://www.surfih.com/surfer/stvkoch http://inov.es Compartilhar este post Link para o post Compartilhar em outros sites