PHP Modelo - Vista - Controlador
- Aquí temos unha explicación do que é Modelo-Vista-Controlador.
- Existen moitos frameworks PHP que nos permiten programar seguindo o patrón de deseño de software Model-View-Controller.
Nota: Como editor de texto recomendo instalar Brackets.
Sumario
Instalación
- Primeiro vídeo: basicamente fala de instalar composer e con el instalar Laravel. Para instalar Laravel necesitamos ter php instalado.
- Para instalar Laravel, dende consola escribiremos: composer create-project laravel/laravel nome_proxecto "5.1.*"
- Sendo 5.1 a versión de Laravel a utilizar
- Para lanzar o servidor web do proxecto creado, estando no cartafol raíz de dito proxecto, escribiremos: php artisan serve
- Aparecerá unha mensaxe informando de que o servidor web está levantado e escoitando no porto 8000. Escribiremos na URL do navegador: http://localhost:8000
- Artisan é un comando de Laravel. Podedes consultalo neste enlace.
- Para executar un comando de artisan temos que escribir: php artisan comando dende o raíz do sitio web creado.
- Cando creamos un modelo coa orde: php artisan make:model Note
- Isto crea un arquivo de nome Note.php no cartafol /app no raíz do proxecto.
Primeiros pasos
-
- Nesta parte imos usar diferentes 'verbos' do protocolo HTTP.
- Instalaremos o complemento de firefox HttpRequester para simular o envío utilizando os verbos (get, post, put,...).
- Exercicios: Unha vez lido os puntos anteriores deberedes facer diferentes rutas utilizando diferentes verbos có complemento.
- EXEMPLO:

- Exemplo de envío utilizando o método POST a url http://localhost:8000/testpost, sendo 'testpost' unha ruta previamente definida:
1 Route::post('/testpost',function() { 2 echo "Isto é un post a /testpost"; 3 });
- Durante o manual fala de utilizar un controlador para recibir un parámetro.
- Se queredes facer a proba teredes que definir un arquivo php no cartafol: /proxecto/app/Http/Controllers/ControladorProba.php
- O nome ControladorProba.php é un exemplo.
- O código de dito arquivo pode ser algo parecido a isto:
1 <?php 2 3 namespace App\Http\Controllers; 4 5 use App\User; 6 use App\Http\Controllers\Controller; 7 8 class ControladorProba extends Controller { 9 10 public function procedementoControlador($id){ 11 return "Esta información ven dun controlador especifico. Recibido o dato $id"; 12 } 13 14 }
- Como se pode ver, o nome da clase é igual ao nome do arquivo php. Deriva da clase Controller.
- Leva un procedemento de nome 'procedementoControlador' cun parámetro.
- Agora debemos crear a ruta que vai facer uso de esta clase controladora:
- Modificamos o arquivo routes.php.
Route::get('controlador/{identificador}','ControladorProba@procedementoControlador');
- Como vemos, agora en vez de ter unha función anónima, temos o nome da clase controladora (ControladorProba) e o nome do procedemento almacenado ao que vai chamar (procedementoControlador). Dito procedemento vai levar un parámetro que está definido na parte Get da orde route ({identificador}).
- Agora podemos poñer unha URL da forma: http://localhost:8000/controlador/1000
- Enviaremos o dato 1000 á clase controladora.
- Recurso:
- Páxina web para verificar unha expresión regular: regex101.com.
- Exercicios:
- Crea unha ruta con dous parámetros que sexan opcionais. Dalle un valor por defecto a cada un deles.
- Crea unha ruta que acepte como parámetro unha expresión regular de 5 números do 0 ao 7.
- Crea outra ruta que acepte como parámetro unha expresión regular que acepta un número-letras (número guión letras)
- Solucións:
1 Route::get('/opcionais/{param1?}/{param2?}',function($par1=1,$par2='valor defecto'){ 2 echo "O param1 ten valor $par1 e o param2 ten valor $par2"; 3 }); 4 5 Route::get('/rutaNumeros/{numero}',function($numero){ 6 echo "5 números de 0 ao 7: $numero"; 7 })->where(array('numero' => '[0-7]{5}')); 8 9 Route::get('/rutaNumerosCadea/{dato}',function($dato){ 10 echo "Dato numérico-texto: $dato"; 11 })->where(array('dato' => '[0-7]+-[a-z|A-Z]+'));
Vistas
Exemplo 1 do manual anterior. Creación dunha vista
- Lembrar que as vistas é onde se atopa o código que vai amosarse ao usuario (html,css,javascript).
- A vista foi creada previamente no cartafol: /raiz_proxecto/resources/views
- Arquivo: algo.blade.php
1 <!DOCTYPE html> 2 <html lang="es"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Isto é unha vista de proba</title> 6 </head> 7 <body> 8 <h1>Vista "algo"</h1> 9 <p>Esta é a miña primeira vista en Laravel</p> 10 </body> 11 </html>
- Un exemplo de código dunha ruta (routes.php) cun if condicional para preguntar se a vista existe dende .
1 Route::get('vistas',function(){ 2 if(view()->exists("algo")){ 3 return view('algo'); 4 }else { 5 echo "A vista non existe"; 6 } 7 });
Exemplo 2 do manual anterior. Creación dunha vista nun cartafol e paso de parámetros á vista dende a ruta
- Seguindo o exemplo do manual, imos crear unha vista no cartafol /sitio_raiz/resources/views/outro.
- Arquivo: index.blade.php
1 <!DOCTYPE html> 2 <html lang="es"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Isto é unha vista de proba dentro dun cartafol</title> 6 </head> 7 <body> 8 <h1>Vista "algo" dentro dun cartafol</h1> 9 <p>Benvido {{$nomeVista}}. Xa vexo que tes {{$idadeVista}} anos :)</p> 10 </body> 11 </html>
- Liña 9: Como vemos imos facer uso de dúas variables que van vir dende a ruta (poderían vir da mesma forma dende o controlador). Como estamos nun arquivo blade.php podemos facer uso da sintaxe das plantillas, no que para 'imprimir as variables' utilizamos {{ }}
- Arquivo: routes.php
1 Route::get('vistas',function(){ 2 if(view()->exists("outro.index")){ 3 $nome='Angel'; 4 $idade=45; 5 return view('outro.index',[ 6 'nomeVista' => $nome, 7 'idadeVista' => $idade 8 ]); 9 }else { 10 echo "A vista non existe"; 11 } 12 });
- Como vemos no return view enviamos en forma de array as variables que imos utilizar na vista (nomeVista e idadeVista) cos valores das variables definidas na ruta ($nome e $idade).
- Exercicio proposto: Modifica a ruta anterior para que reciba dous parámetros e sexan os que se envíen á vista (Nota: podemos ter as dúas vistas á vez)
- Solución:
1 Route::get('vistas/{nome}/{idade}',function($nome,$idade){ 2 if(view()->exists("outro.index")){ 3 return view('outro.index',[ 4 'nomeVista' => $nome, 5 'idadeVista' => $idade 6 ]); 7 }else { 8 echo "A vista non existe"; 9 } 10 });
-- Ángel D. Fernández González -- (2016).