Diferencia entre revisiones de «PHP Modelo - Vista - Controlador»

De MediaWiki
Ir a la navegación Ir a la búsqueda
Línea 119: Línea 119:
 
* [http://www.desarrolloweb.com/articulos/introduccion-vistas-laravel5.html Introdución ás vistas].
 
* [http://www.desarrolloweb.com/articulos/introduccion-vistas-laravel5.html Introdución ás 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).
 
* Lembrar que as vistas é onde se atopa o código que vai amosarse ao usuario (html,css,javascript).
  
Línea 148: Línea 149:
 
</syntaxhighlight>  
 
</syntaxhighlight>  
  
 +
=== 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'''
 +
::<syntaxhighlight lang="java" line enclose="div" highlight="9" >
 +
<!DOCTYPE html>
 +
<html lang="es">
 +
<head>
 +
<meta charset="UTF-8">
 +
<title>Isto é unha vista de proba dentro dun cartafol</title>
 +
</head>
 +
<body>
 +
<h1>Vista "algo" dentro dun cartafol</h1>
 +
    <p>Benvido {{$nomeVista}}. Xa vexo que tes {{$idadeVista}} anos :)</p>
 +
</body>
 +
</html>
 +
</syntaxhighlight>
 +
 +
* 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'''
 +
::<syntaxhighlight lang="java" line enclose="div" highlight="9" >
 +
Route::get('vistas',function(){
 +
  if(view()->exists("outro.index")){
 +
      $nome='Angel';
 +
      $idade=45;
 +
      return view('outro.index',[
 +
            'nomeVista' => $nome,
 +
            'idadeVista' => $idade
 +
        ]);
 +
  }else {
 +
      echo "A vista non existe";
 +
  }
 +
});
 +
</syntaxhighlight>
 +
 +
* 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:'''
 +
::<syntaxhighlight lang="java" line enclose="div" highlight="1" >
 +
Route::get('vistas/{nome}/{idade}',function($nome,$idade){
 +
  if(view()->exists("outro.index")){
 +
      return view('outro.index',[
 +
            'nomeVista' => $nome,
 +
            'idadeVista' => $idade
 +
        ]);
 +
  }else {
 +
      echo "A vista non existe";
 +
  }
 +
});
 +
</syntaxhighlight>
  
  

Revisión del 19:08 13 nov 2016

  • 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.

Instalación

  • Primeiro vídeo: basicamente fala de instalar composer e con el instalar Laravel. Para instalar Laravel necesitamos ter php instalado.
  • Os pasos para instalar php os tedes na wiki.
  • Os pasos para instalar composer os tedes na wiki.
  • Os pasos para instalar Mysql, un xestor de bases de datos, os tedes na wiki.


  • 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:
Php laravel 1.jpg
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).