Diferencia entre revisiones de «PHP Modelo - Vista - Controlador»
Ir a la navegación
Ir a la búsqueda
(→Vistas) |
|||
| Línea 205: | Línea 205: | ||
| + | == HTTP Request == | ||
| + | * [http://www.desarrolloweb.com/articulos/http-request-laravel5.html 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''' | ||
| + | ::<syntaxhighlight lang="java" line enclose="div" highlight="27" > | ||
| + | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" | ||
| + | "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | ||
| + | <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"> | ||
| + | <head> | ||
| + | <meta charset="utf-8" /> | ||
| + | <title>Formulario</title> | ||
| + | <style> | ||
| + | .formularios{ | ||
| + | width: 30%; | ||
| + | margin: 0px auto; | ||
| + | } | ||
| + | .etiqueta{ | ||
| + | float: left; | ||
| + | width: 190px; | ||
| + | } | ||
| + | .botonesformularios{ | ||
| + | width: 50%; | ||
| + | margin: 30px auto; | ||
| + | text-align: center; | ||
| + | } | ||
| + | select { | ||
| + | width:50%; | ||
| + | } | ||
| + | </style> | ||
| + | </head> | ||
| + | <body> | ||
| + | <form id="frmValidacion" class="formularios" method="post" action="/controlador"> | ||
| + | <div> | ||
| + | <div class='etiqueta'>Login:</div> | ||
| + | <input type="text" size="15" maxlength="15" name="txtLogin" /> | ||
| + | </div> | ||
| + | <div> | ||
| + | <div class='etiqueta'>Password:</div> | ||
| + | <input type="password" size="15" maxlength="15" name="txtPassword" /> | ||
| + | </div> | ||
| + | <div class="botonesformularios"> | ||
| + | <input type='submit' value="ENVIAR" /> | ||
| + | </div> | ||
| + | </form> | ||
| + | |||
| + | </body> | ||
| + | </html> | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | |||
| + | : 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''' | ||
| + | ::<syntaxhighlight lang="java" line enclose="div" highlight="" > | ||
| + | Route::get('formulario/',function(){ | ||
| + | return view('formulario.Formulario'); | ||
| + | }); | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | : <u>Nota:</u> 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 é <u>post</u>. | ||
| + | : Arquivo: '''proxecto_raiz/app/Http/routes.php''' | ||
| + | ::<syntaxhighlight lang="java" line enclose="div" highlight="" > | ||
| + | Route::post('controlador/','ControladorProba@mostrarUriUrl'); | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | |||
| + | * Agora creamos a clase controladora e método mostrarUriUrl dentro dela. | ||
| + | ::<syntaxhighlight lang="java" line enclose="div" highlight="15,24" > | ||
| + | <?php | ||
| + | |||
| + | namespace App\Http\Controllers; | ||
| + | |||
| + | use App\User; | ||
| + | use App\Http\Controllers\Controller; | ||
| + | use Illuminate\Http\Request; | ||
| + | |||
| + | class ControladorProba extends Controller { | ||
| + | |||
| + | public function procedementoControlador($id){ | ||
| + | return "Esta información ven dun controlador especifico. Recibido o dato $id"; | ||
| + | } | ||
| + | |||
| + | public function mostrarUriUrl(Request $request){ | ||
| + | echo $request->path(); | ||
| + | echo "<br>"; | ||
| + | echo $request->url(); | ||
| + | echo "<br>"; | ||
| + | |||
| + | |||
| + | var_dump($request->all()); // ou dd(($request->all())); ou print_r(($request->all())); | ||
| + | |||
| + | } | ||
| + | |||
| + | } | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | |||
| + | * Dará como resultado: | ||
| + | ::<syntaxhighlight lang="java" enclose="div" highlight="" > | ||
| + | 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) | ||
| + | |||
| + | </syntaxhighlight> | ||
Revisión del 20:45 13 nov 2016
- 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 });
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 }
- 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)
-- Ángel D. Fernández González -- (2016).