Usuario:ManuelRomero/Laravel/controller

De WikiEducator
Saltar a: navegación, buscar
Road Works.svg Trabajo en proceso, espera cambios frecuentes. Tu ayuda y retroalimentación son bienvenidos.
Ver página de charlas.
Road Works.svg




Controlador en Laravel

  • Es la manera de definir el comportamiento de la aplicacion
  • Hasta ahora hemos usado router para decir que hacer cuando el usuario accede a una determinada URL, podemos organizarlo mejor
  • Los controladores serán ficheros php que ubicaremos en la carpeta app/http/controllers
  • Nuestros controladores extenderán de la clase base BaseController de laravel
  • A continuación vamos a crear un controlador para ver su funcionamiento
<?php 
class UsuarioControllers extends BaseController {
   //Aquí escribiremos los métodos que queremos que implemente el controlador
 
}
?>
  • Pare ver su funcionamiento vamos a hacer un ejemplo
  • Supongamos que qeremos hacer una aplicación que visualice todos los usuarios que tenemos en una base de datos
  • Para hacerlo, vamos a usar el modelo vista controlador
  • El modelo se encargará de leer de la base de datos
  • El controlador aportará los datos para la vista
  • LA vista los visualizará
  • Este sencillo ejemplo muestra la forma de desarrollar código con laravel.

ModeloVC.png

  1. Creamos la base de datos
  • Para especificar la base de datos de nuestro proyecto vamos a
/config/database.php 
  • Ahí la configuramos
  • Ahora en mysql, en la base de datos especificada creamos una tabla de usuarios o usamos la que ya tenemos.
  • El modelo, será la parte encargada de acceder a la base de datos y recuperar la información
  • El larevel para gestionar la base de datos se usa Eloquent ORM; Esta clase nos va a permitir acceder a la base de datos casi sin darnos cuenta que lo estamos haciendo, eliminandonos todo el trabajo que en realidad es siempre repetitivo de conectar e interactuar con la base de datos
  • Vamos a ver la sencillez de su uso

Cremos una clase como modelo (en la carpeta correspondiente /app/models <?php class Usuario extends Eloquent { //Todos los modelos deben extender la clase Eloquent

   protected $table = 'usuarios';

} ?> Por defecto al se la clase usuarios, el ya obtiene la tabla con el mismo nombre en plurar, por lo que no haría falta ni poner la variable a utilizar

Laravel asume que todas las tablas tienen tres campos básicos ‘id’ (clave primaria), ‘created_at’, ‘updated_at’. Los últimos dos son llenados automáticamente por el framework.

La vista
  • Es crear una plantilla de blade, pero ahora queremos añadir la información de los usuarios
  • Para ello contamos que disponemos de la variable $usuario
<h3>Datos de usuarios </h3>
@foreach($usuarios as $usuario)
   <li>
      {{ $usuario->nombre.' '.$usuario->apellido }} 
    </li>
@endforeach
El controlador
  • Ahora vamos a la parte del controlador

Ya hemos dicho que ha de derivar de la clase BaseController y preferiblemente ha de estar ubicado en la carpeta app/controller

  • Ahora vamos a crear un método que obtenga la información de todos los usuarios y se los pase a la vista creada anteriormente. Añadimos un método
public function mostrarUsuarios()
    {
        $usuarios = Usuario::all(); 
        // Con el método all() le estamos pidiendo al modelo de Usuario
        // que busque todos los registros contenidos en esa tabla y los devuelva en un Array
        return View::make('usuarios.lista', array('usuarios' => $usuarios));
 
        // El método make de la clase View indica cual vista vamos a mostrar al usuario 
        //y también pasa como parámetro los datos que queramos pasar a la vista. 
        // En este caso le estamos pasando un array con todos los usuarios
    }
  • Y ahora solo nos quedaría especificar en la ruta el controlador que queremos que ejecute cuando seleccionemos esta url.
  • En lugar de especificar clausuras o funciones anónimas, se pueden especificar controladores que además es lo que se suele hacer.
Route::get('usuarios', array('uses' => 'UsuarioControllers@mostrarUsuarios'));
  • Ahora solo queda probar el ejemplo