Diferencia entre revisiones de «PHP Modelo - Vista - Controlador»
Ir a la navegación
Ir a la búsqueda
| Línea 27: | Línea 27: | ||
| − | :* Para instalar e crear un proxecto Laravel, dende consola, <u>sen ser root</u>, escribiremos: <b>composer create-project laravel/laravel nome_proxecto "5.1.*"</b> | + | :* Para instalar e crear un proxecto Laravel, dende consola, <u>sen ser root</u>,escribiremos situados no cartafol onde queiramos crear o proxecto: <b>composer create-project laravel/laravel nome_proxecto "5.1.*"</b> |
::: Sendo 5.1 a versión de Laravel a utilizar | ::: 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''' | :: Para lanzar o servidor web do proxecto creado, estando no cartafol raíz de dito proxecto, escribiremos: '''php artisan serve''' | ||
Revisión del 10:32 26 feb 2017
Sumario
Introdución
- 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 para manexar os arquivos do proxecto no framework Laravel recomendo instalar Brackets.
Instalación
- Primeiro vídeo: basicamente fala de instalar composer e con el instalar Laravel.
- Para instalar Laravel necesitamos:
- Ter php instalado.
- Ter composer instalador.
- Ter git instalado.
- Para instalar e crear un proxecto Laravel, dende consola, sen ser root,escribiremos situados no cartafol onde queiramos crear o proxecto: 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 });
HTTP Request
Exemplo 1 do manual anterior. Uso de Http request
- Neste exemplo imos ver como a partires dun formulario no que se pide login-password imos recibir có método 'post' os datos do mesmo noutra vista.
- Partimos do formulario.
- Arquivo: /proxecto_raiz/resources/views/formulario/Formulario.blade.php
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 3 <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"> 4 <head> 5 <meta charset="utf-8" /> 6 <title>Formulario</title> 7 <style> 8 .formularios{ 9 width: 30%; 10 margin: 0px auto; 11 } 12 .etiqueta{ 13 float: left; 14 width: 190px; 15 } 16 .botonesformularios{ 17 width: 50%; 18 margin: 30px auto; 19 text-align: center; 20 } 21 select { 22 width:50%; 23 } 24 </style> 25 </head> 26 <body> 27 <form id="frmValidacion" class="formularios" method="post" action="/controlador"> 28 <div> 29 <div class='etiqueta'>Login:</div> 30 <input type="text" size="15" maxlength="15" name="txtLogin" /> 31 </div> 32 <div> 33 <div class='etiqueta'>Password:</div> 34 <input type="password" size="15" maxlength="15" name="txtPassword" /> 35 </div> 36 <div class="botonesformularios"> 37 <input type='submit' value="ENVIAR" /> 38 </div> 39 </form> 40 41 </body> 42 </html>
- Liña 27: Como vemos na action do formulario imos invocar un controlador a través dunha ruta definida no arquivo routes.php.
- Definimos unha ruta para cargar a vista do formulario:
- Arquivo: proxecto_raiz/app/Http/routes.php
1 Route::get('formulario/',function(){ 2 return view('formulario.Formulario'); 3 });
- Nota: Por practicar estamos amosando a vista directamente dende a ruta, cando deberíamos pasar por un controlador.
- Se poñemos como url: http://localhost:8000/formulario aparecerá o formulario.
- Indicamos no arquivo de routes.php que se ten que facer cando reciba unha chamada do formulario. Fixarse como o verbo da ruta é post.
- Arquivo: proxecto_raiz/app/Http/routes.php
1 Route::post('controlador/','ControladorProba@mostrarUriUrl');
- Agora creamos a clase controladora e método mostrarUriUrl dentro dela.
1 <?php 2 3 namespace App\Http\Controllers; 4 5 use App\User; 6 use App\Http\Controllers\Controller; 7 use Illuminate\Http\Request; 8 9 class ControladorProba extends Controller { 10 11 public function procedementoControlador($id){ 12 return "Esta información ven dun controlador especifico. Recibido o dato $id"; 13 } 14 15 public function mostrarUriUrl(Request $request){ 16 echo $request->path(); 17 echo "<br>"; 18 echo $request->url(); 19 echo "<br>"; 20 21 22 var_dump($request->all()); // ou dd(($request->all())); ou print_r(($request->all())); 23 24 } 25 26 }
- Nota:
- $request->all(): Devolve todos os datos enviados polo formulario.
- $request->input('txtLogin'): Devolve o texto do campo con name 'login' do formulario.
- Dará como resultado:
controlador http://localhost:8000/controlador /home/angel/laravel/first_steps/app/Http/Controllers/ControladorProba.php:22: array (size=2) 'txtLogin' => string 'dfsdf' (length=5) 'txtPassword' => string 'dsfds' (length=5)
- Máis información neste enlace.
Introdución aos modelos
Exemplo 1 do manual anterior
- Temos que ter creada unha base de datos Mysql cun usuario e password que teña permiso sobre dita base de datos.
- Os pasos para instalar Mysql, un xestor de bases de datos, os tedes na wiki.
- Unha vez creada debemos editar o arquivo proxecto_raiz/app/.env
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_DATABASE=homestead DB_USERNAME=laravel DB_PASSWORD=laravel
Unha vez cambiado debemos parar o servidor laravel e volvelo a iniciar coa orde:php artisan serve dende o raíz do proxecto.
- Partindo que xa temos a táboa e a base de datos seguindo o manual...
- Imos facer que se amosen os datos nunha vista en forma de lista.
- Arquivo: proxecto_raiz/resources/views/basedatos/articles.blade.php
1 <!DOCTYPE html> 2 <html lang="es"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Isto é unha vista de proba dunha táboa mysql</title> 6 </head> 7 <body> 8 <ul> 9 <?php 10 foreach($datos as $fila){ 11 printf("<li>%s--->%s",$fila->id,$fila->name); 12 } 13 14 ?> 15 16 </ul> 17 </body> 18 </html>
- Liña 10: Nomeamos $datos á variable que vai vir do controlador cos datos da táboa. Segundo o manual isto non é necesario xa que podemos acceder dende calquera parte aos datos do modelo coa orde: \App\Article::all(); Pero desta forma practicamos o paso de datos dende o controlador e ademáis supoño que será a forma correcta :)
- Arquivo: /proxecto_raiz/app/Http/Controllers/ArticulosController.php
1 <?php 2 3 namespace App\Http\Controllers; 4 5 use App\User; 6 use App\Http\Controllers\Controller; 7 use Illuminate\Http\Request; 8 9 class ArticulosController extends Controller { 10 11 public function amosarArticulos(){ 12 $datos=\App\Article::all(); 13 return view('basedatos.articles',[ 14 'datos' => $datos 15 ]); 16 17 } 18 19 20 }
- Liñas 13,14: Dende este método do controlador enviamos os datos da táboa á vista.
- Arquivo: /proxecto_raiz/app/Http/routes.php
1 Route::get('articulos/','ArticulosController@amosarArticulos');
- Cando na url poñamos: http://localhost:8000/articulos chamará ao método amosarArticulos do controlador ArticulosController.
- Resultado:
1--->Probando 2--->Algo 3--->Lindo
-- Ángel D. Fernández González -- (2016).