MVC na Linguagem PHP - III
A pedido de um leitor, decidimos escrever um artigo em que exemplificamos este maravilhoso (ou não) modelo MVC utilizando a linguagem de programação PHP. A primeira e segunda partes já foram publicadas e hoje é a vez da terceira onde tudo começa a tornar-se mais facilmente compreendido. Em primeiro lugar, quero referir algumas modificações que efetuei em alguns dos ficheiros que já trabalhámos. Adicionei a constante SITETITLE ao ficheiro config.php, ficando a primeira secção deste ficheiro da seguinte forma: pageInfo['title'] = $title . ' | ' . SITETITLE; } Hoje vamos continuar a nossa jornada começando na pasta pública, ou seja, na pasta publichtml. Vamos começar com o nosso maravilhoso .htaccess. ErrorDocument 404 /404 ErrorDocument 500 /500 RewriteEngine On RewriteCond %{REQUESTFILENAME} !-d RewriteCond %{REQUESTFILENAME} !-f RewriteCond %{REQUESTFILENAME} !-l RewriteRule ^(.+)$ index.php?url=$1 [QSA,L] Como pode ver, todos os pedidos serão direcionados para o ficheiro index.php com o URL completo na forma de parâmetro GET. Falando em index.php, e que tal lhe darmos uma espreitadela? Este vai ser o ficheiro que vai iniciar toda a sequência de acontecimentos. Ora veja: init(); Neste ficheiro, como pode ver, o ficheiro das configurações é chamado e, de seguida, é criado uma função de auto carregamento. O que faz esta função? Simplesmente tenta carregar uma classe indefinida. Como pode ver, eu não importo a classe Bootstrap, mas logo de seguida uso-a. Consigo utilizá-la porque a a função de auto load chama esta classe automaticamente. Mas atenção! Este código apenas nos permite carregar automaticamente classes contidas na pasta libs. > Se neste momento experimentar correr o código nesta pasta irá receber diversos erros porque ainda não foram criados nenhuns controladores. Nem mesmo o dos erros! Header and Footer Antes de continuarmos para a criação dos controladores, devemos criar os ficheiros do cabeçalho e do rodapé que são chamados quando executamos a função render. Estes dois ficheiros deverão estar localizados na diretoria appcore/views/.php, onde `` corresponde a header e a footer. A minha proposta para o ficheiro do cabeçalho é a seguinte: MVCPHPB | Home | Page | Posts Onde já temos o título da página que será igual ao título que é definido utilizando a função que referi no início do artigo, ou apenas o nome do site. Deixei também uma pequena introdução à estrutura HTML do site e uma pista àquilo que iremos criar: iremos criar uma página estática (Page) e uma página dinâmica com alguns itens de uma base de dados (Posts). Estou também a utilizar o normalize.css e uma folha de estilos própria com alguns ajustes de forma a distinguir melhor cada uma das partes do site. Aqui está o template.css (deve ser colocado na pasta css): header, wrap, footer { padding: 20px; } header { background: rgba(0,0,0,0.12); } footer { background: rgba(0,0,0,0.5); } Vamos agora ver o rodapé. O rodapé está localizado no ficheiro appcore/views/footer.php e o conteúdo deve ser algo semelhante ao seguinte: MVCPHPB Footer Controladores Depois de termos "montado" a estrutura, devemos passar à criação das páginas. Em primeiro lugar, vamos criar o controlador do erro. view->setTitle($data['title']); $this->view->setData($data); $this->view->render('error/index'); } } Os controladores devem pertencer à namespace Controller e devem ter, obrigatoriamente, o seu construtor presente no formato mostrado acima. Este é um controlador que só terá o método index relacionado com as páginas pois não irá ser utilizado mais nenhum. Acima pode visualizar que este método irá receber um argumento que, por padrão, é '404'. De seguida, algumas informações são atribuídas dependendo do erro em questão. Depois o título da página é definido e, mais tarde, os dados são enviados para a view. Falando em view, esta é renderizada logo de seguida. A view que colocámos é error/index, então o ficheiro PHP deverá encontrar-se em appcore/views/error/index.php. > Se experimentar correr o código neste momento, deverá receber um erro por não encontrar a View da página de erro. Vamos então visualizar a view que corresponde à página de erro: data['title'] ?> data['msg']; ?> É simples. Serve apenas para mostrar que ocorreu um erro. Mas não podemos continuar assim pois ao abrirmos a página inicial estamos apenas a ver um erro. Vamos então criar o controlador da página inicial, que deve conter o seguinte código: view->setTitle('Home'); $this->view->render('index/index'); } } E o ficheiro da sua view deverá ter qualquer coisa que deseje. Eu, por exemplo, coloquei: MVC PHP Bootstrap (MVCPHPB) This is the main page of this website that is a simple mvc structure model example. Esta é a página principal deste site que é um exemplo de modelo de estrutura MVC simples. Coloque o que queira. De momento, se aceder à página inicial deverá visualizar a página inicial propriamente dita e se tentar, eventualmente, abrir qualquer outra possível página, irá ver a página de erro 404. No próximo tutorial iremos ver a criação de uma página dinâmica com um modelo. Pode, entretanto, experimentar criar mais páginas ou até mesmo criar mais métodos para sub-páginas.
Discussion in the ATmosphere