3-1Cómo pasarle una vista a un controllador

 https://www.youtube.com/watch?v=KZGHCSIb9Q0&list=PLZ2ovOgdI-kWWS9aq8mfUDkJRfYib-SvF&index=4

Vistas

Laravel nos permite separar la logica de presentacion de la logica de nuestra aplicacion a travez de las vista.

Crear una vista

Las vista generalmente se encuentran en el directorio /resource/views de la carpeta principal de nuestro proyecto. Crear una vista con Laravel simplemente necesitas crear un archivo .php o .blade.php en el directorio /views .

Retornar una vista

Para retornar una vista retornamos el llamado a la funcion view pasando como argumento el nombre de la vista. El nombre del archivo es relativo a la carpeta resource/views y no es necesario indicar la extension del archivo.

Pasar datos a la vista

Podemos pasar datos a la vista mediante un arreglo asociativo, donde las llaves son el nombre de las variables que queremos pasar a la vista y el valor son los datos que queremos asoociar.

$users = [
  'Joel',
  'Ellie',
  'Tess'
];

return view('users', [
  'users' => $users
]);

Tambien podemos utilizar el metodo with encadenandolo al llamado a la funcion view para pasar datos a la vista en formato de array asociativo.

return view('users')->with([
  'users' => $users
]);

Tambien podemos pasar las variable de forma individual

return view('users')
  ->with('users', $users)
  ->with('title', 'Listado de usuarios');

Blade, sistema de plantilla

Imprimir variable

Si queremos imprimir una variable, podemos hacerlo utilizando la sintaxis de doble llaves {{ }}

<li>{{ $user }}</li>

Ciclos y estructuras

Si queremos utilizar ciclos y estructuras condicionales, podemos utilizar directivas, las directivas de Blade van precedidas por arroba @ y luego el nombre de la directiva.

Directiva @foreach

@foreach ($users as $user)
    <li>{{ $user }}</li>
@endforeach

Directiva @if

@if (! empty($users))
    ...
@endif

Directiva @if @else

@if (! empty($users))
    ...
@else
    <p>No hay usuarios registrados.</p>
@endif

Directiva @elseif

@if (! empty($users))
    ...
@elseif ($users < 3)
    <p>Hay menos de 3 usuarios registrados.</p>
@else
    <p>No hay usuarios registrados.</p>
@endif

Directiva @unless funciona como un condicional inverso

@unless (empty($users))
    <ul>
        @foreach ($users as $user)
            <li>{{ $user }}</li>
        @endforeach
    </ul>
@else
    <p>No hay usuarios registrados.</p>
@endunless

Layouts con Blade

A medida que nuestro proyecto crece nuestra plantillas se vulven mas complejas y es inevitable encontrarnos con que estamos repitiendo etiquetas y estructuras que podriamos compartir entre multiples vista. Laravel nos ofrece con Blade unas directiva para evitar la repeticion de etiquetas.

Directiva @include

Para usarla solamente tenemos que pasarle el nombre del archivo que queremos incluir

@include('header')
    <h1>{{ $title }}</h1>
    ...
@include('footer')

Helper asset()

Nos dara la ruta absoluta al archivo indicado.

<link href="{{ asset('css/style.css') }}" rel="stylesheet">

Layout principal

En lugar de separar nuestras plantilla en diferentes archivos, podemos crear una sola plantilla que tendra la estructura de nuestro diseno. Podemos llamar a esta plantilla layout.blade.php por ejemplo y colocar todo el codigp de nuestro diseno alli.

Utilizando la directiva @yield dentro de esta plantilla podemos indicar secciones y luego en plantillas individuales podemos colocar el contenido de dichas secciones.

Hasta ahora hemos aprendido a crear modelos y controladores, dijimos que los modelos nos sirven para trabajar con la base de datos y los controladores para procesar las distintas peticiones. Además, los controladores no sólo se comunican con los modelos para interactuar con la base de datos, sino también dispondrán de la vista para devolverle la presentación al navegador.

Las vistas están formadas más que nada por código html, aunque pueden incluir pequeños trozos de código php como variables, condicionales o bucles. Por su parte Laravel utiliza un motor de plantillas llamado Blade, que nos facilitará el desarrollo del código y resumirá el mismo.

Crear vistas

Las vistas deben crearse dentro de nuestra carpeta views, dentro de app -> views. Para ello vamos a crear primero una carpeta con el mismo nombre del controlador que habíamos creado en la publicación pasada. Vamos a app -> views y dentro creamos esa carpeta llamada test, y dentro vamos a crear una archivo llamado index.blade.php.

Vamos a editar esta vista con cualquier código, por ejemplo:

<h1> Hola, soy una vista </h1>

Incluir una vista dentro de un controlador

Hasta ahora, cada vez que necesitábamos hacer salidas al navegador mediante las acciones de los controladores, retornábamos una cadena con return. Para devolver una vista completa, vamos a editar el controlador de la publicación pasada de la siguiente forma:

<?php
class TestController extends BaseController {
   public function getIndex() {
      return View::make('test.index');
   }
}
?>

Como se ve en el ejemplo, dentro del método getIndex(), el cual habíamos dicho que es la acción principal de un controlador, devolvemos la salida al navegador mediante la vista, la cual llamamos con la clase View y el método make(). Este método debe incluir el nombre de la vista (sin el «.blade.php»), como en este caso la vista está dentro de una carpeta llamada «test», debemos hacerlo separando con un punto la carpeta de la vista: «carpeta.vista»:

View::make('test.index');

Si reiniciamos nuestro servidor y visitamos la siguiente dirección podremos ver el mensaje de saludo:

https://localhost:8000/test

Pasar variables del controlador a la vista 

Para pasar una variable del controlador a la vista debemos usar el método with():

<?php
class TestController extends BaseController {
   public function getIndex() {
      $nombre = 'Fernando';
      return View::make('test.index')->with('nombre', $nombre);
   }
}
?>

Como podemos ver, el método with() recibe dos parámetros, la variable con el nombre que estará disponible en la vista y el valor de ésta.

Ahora para acceder a la variable en la vista debemos incluirla dentro de doble apertura de llave y doble cierre. Para eso vamos a editar nuestra vista con el siguiente código:

<h1> Hola {{ $nombre }} </h1>

Condicionales y bucles

Si bien la lógica de la aplicación debería definirse en el controlador, dentro de la vista podemos realizar instrucciones simples como condicionales o bucles. Por ejemplo podemos cargar la lista de usuarios de nuestra aplicación y verificar con un if si hay usuario cargados y de haberlos mostrarlos con un foreach.

Para ello vamos a editar nuestra acción con el siguiente código:

<?php
class TestController extends BaseController {
   public function getIndex() {
      $users = User::all();
      return View::make('test.index')->with('users', $users);
 }
}
?>

Aquí recuperamos la lista de usuarios mediante el método all() y lo guardamos en una variable que pasamos a la vista.

Luego para mostrar esta lista en la vista deberíamos editar el archivo index.blade.php con lo siguiente:

<h1> Usuarios </h1>
@if($users)
   <ul>
      @foreach($users as $item)
         <li> {{ $item->real_name }} - {{ $item->email }} </li>
      @endforeach
   </ul>
@else
   <p> No hay usuarios cargados </p>
@endif

Como se ve en el código, cada instrucción ya sea condicional o bucle debe escribirse con un signo @ (arroba), además lo que ya vimos de imprimir variables mediante las doble llaves.


Crear una vista

Las vistas generalmente se encuentran en el directorio /resources/views de la carpeta principal de nuestro proyecto. Crear una vista con Laravel es muy sencillo, simplemente necesitamos crear un archivo .php (o .blade.php como veremos en la lección siguiente) en el directorio  /views. Dentro de este archivo escribimos el HTML de la vista.

Retornar una vista

Para retornar una vista retornamos el llamado a la función helper view pasando como argumento el nombre de la vista. El nombre del archivo es relativo a la carpeta resources/views y no es necesario indicar la extensión del archivo:

public function index()
{
return view('users');
}

Pasar datos a la vista

Podemos pasar datos a la vista mediante un arreglo asociativo, donde las llaves son el nombre de las variables que queremos pasar a la vista y el valor son los datos que queremos asociar:

$users = [
'Joel',
'Ellie',
'Tess',
//...
];
return view('users', [
'users' => $users
]);

También podemos usar el método with encadenándolo al llamado a la función view para pasar datos a la vista en formato de array asociativo:

return view('users')->with([
'users' => $users
]);

Con with también podemos pasar las variables de forma individual:

return view('users')
->with('users', $users)
->with('title', 'Listado de usuarios');

Si los datos que queremos pasar a la vista se encuentran dentro de variables locales podemos utilizar la función compact,  la cual acepta como argumentos los nombres de las variables y las convierte en un array asociativo:

$users = [
...
];
$title = 'Listado de usuarios';
return view('users', compact('users', 'title'));

Comentarios

Entradas populares de este blog

Filtrando por fecha

10 videojuegos gratis para aprender JavaScript en línea

reloj obs---datetime.lua