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.
Las vistas contienen el HTML servido por su aplicación y sirven como un método conveniente para separar su controlador y la lógica de dominio de su lógica de presentación. Las vistas se almacenan en el directorio.resources/views
Una vista simple se ve así:
<!-- View stored in resources/views/greeting.php --><html><body><h1>Hello, <?phpecho$name;?></h1></body></html>
La vista se puede devolver al navegador de la siguiente manera:
Como puede ver, el primer argumento pasado al viewasistente corresponde al nombre del archivo de vista en el directorio. El segundo argumento pasado a helper es una matriz de datos que deberían estar disponibles para la vista.resources/views
Por supuesto, las vistas también pueden estar anidadas dentro de los subdirectorios del directorio. Por ejemplo, si su vista se almacena en , debería devolverse así:resources/viewsresources/views/admin/profile.php
returnview('admin.profile',$data);
Pasar datos a vistas
// Using conventional approach$view=view('greeting')->with('name','Victoria');// Using Magic Methods$view=view('greeting')->withName('Victoria');
En el ejemplo anterior, la variable $namese hace accesible a la vista y contiene Victoria.
Si lo desea, puede pasar una matriz de datos como segundo parámetro al viewayudante:
$view=view('greetings',$data);
Al pasar información de esta manera, $datadebe haber una matriz con pares clave / valor. Dentro de su vista, puede acceder a cada valor utilizando su clave correspondiente, como (suponiendo que exista).{{$key}}$data['key']
Compartir datos con todas las vistas
Ocasionalmente, es posible que deba compartir un dato con todas las vistas que representa su aplicación. Tiene varias opciones: el viewayudante, el contrato o un compositor de vistas comodín .Illuminate\Contracts\View\Factory
Por ejemplo, usando el viewayudante:
view()->share('data',[1,2,3]);
También puedes usar la Viewfachada:
View::share('data',[1,2,3]);
Por lo general, realizaría llamadas al sharemétodo dentro del método de un proveedor de servicios boot. Puede agregarlos AppServiceProvidero generar un proveedor de servicios por separado para alojarlos.
Nota: Cuando viewse llama al asistente sin argumentos, devuelve una implementación del contrato.Illuminate\Contracts\View\Factory
Determinar si existe una vista
Si necesita determinar si existe una vista, puede usar el existsmétodo:
if(view()->exists('emails.customer')){//}
Devolver una vista desde una ruta de archivo
Si lo desea, puede generar una vista desde una ruta de archivo totalmente calificada:
Los compositores de vistas son devoluciones de llamada o métodos de clase que se invocan cuando se representa una vista. Si tiene datos que desea vincular a una vista cada vez que se representa esa vista, un compositor de vistas organiza esa lógica en una única ubicación.
Definición de un compositor de vistas
Organicemos nuestros compositores de vistas dentro de un proveedor de servicios . Usaremos la Viewfachada para acceder a la implementación del contrato subyacente :Illuminate\Contracts\View\Factory
<?phpnamespaceApp\Providers;useView;useIlluminate\Support\ServiceProvider;classComposerServiceProviderextendsServiceProvider{/**
* Register bindings in the container.
*
* @return void
*/publicfunctionboot(){// Using class based composers...
View::composer('profile','App\Http\ViewComposers\ProfileComposer');// Using Closure based composers...
View::composer('dashboard',function($view){});}/**
* Register the service provider.
*
* @return void
*/publicfunctionregister(){//}}
Nota: Laravel no incluye un directorio predeterminado para ver compositores. Eres libre de organizarlos como quieras. Por ejemplo, podría crear un directorio.App\Http\ViewComposers
Recuerde, deberá agregar el proveedor de servicios a la providersmatriz en el archivo de configuración.config/app.php
Ahora que hemos registrado el compositor, el ProfileComposer@composemétodo se ejecutará cada vez que se profilevisualice la vista. Entonces, definamos la clase de compositor:
<?phpnamespaceApp\Http\ViewComposers;useIlluminate\Contracts\View\View;useIlluminate\Users\Repositoryas UserRepository;classProfileComposer{/**
* The user repository implementation.
*
* @var UserRepository
*/protected$users;/**
* Create a new profile composer.
*
* @param UserRepository $users
* @return void
*/publicfunction__construct(UserRepository $users){// Dependencies automatically resolved by service container...$this->users=$users;}/**
* Bind data to the view.
*
* @param View $view
* @return void
*/publicfunctioncompose(View $view){$view->with('count',$this->users->count());}}
Justo antes de que se visualice la vista, composese llama al método del compositor con la instancia. Puede usar el método para vincular datos a la vista.Illuminate\Contracts\View\Viewwith
Nota: Todos los compositores de vistas se resuelven a través del contenedor de servicios , por lo que puede insinuar cualquier dependencia que necesite dentro del constructor de un compositor.
Comodines Ver Compositores
El composermétodo acepta el *carácter como comodín, por lo que puede adjuntar un compositor a todas las vistas de esta manera:
View::composer('*',function($view){//});
Adjuntar un compositor a varias vistas
También puede adjuntar un compositor de vistas a varias vistas a la vez:
Los creadores de vistas funcionan casi exactamente como los compositores de vistas; sin embargo, se disparan inmediatamente cuando se instancia la vista. Para registrar un creador de vistas, use el creatormétodo:
Hola, en este tutorial veremos como funcionan las vistas en laravel, empecemos!
Nuestro objetivo es reutilizar un archivo, nuestro archivo layout que va servir como contenedor de los demás, primero vamos a crear nuevas rutas en el archivo routes/web.php , así debe quedar:
1
2
3
4
5
6
7
Route::get('/',function(){
returnview('bienvenidos');
});
Route::get('/contacto',function(){
returnview('contacto');
});
Ahora crearemos las 2 vistas bienvenidos.blade.php y contacto.blade.php en la carpeta resources/views
1
2
3
4
5
6
7
8
9
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<h1>Bienvenidos</h1>
</body>
</html>
1
2
3
4
5
6
7
8
9
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<h1>Contacto</h1>
</body>
</html>
Quedando estas vistas en resources/views/bienvenidos.blade.php y
resources/views/contacto.blade.php
Vemos que si seguimos asi vamos a estar repitiendo el encabezado, el css y el javascript en cada vista y eso no es lo mas óptimo, pero con blade se soluciona esto. Creamos un nuevo archivo llamado layout.blade.php dentro de resources/views de esta manera:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<nav>
<ul>
<li>
<a href="/">Home</a>
</li>
<li>
<a href="/contacto">Contacto</a>
</li>
</ul>
</nav>
<div class="content">
@yield('contenido')
</div>
</body>
</html>
La directiva de blade: @yield, nos permitirá inyectar el contenido de una vista. Vamos a modificar la vista bienvenidos.blade.php
1
2
3
4
@extends('layout')
@section('contenido')
<h1>Bienvenidos</h1>
@endsection
Vemos que @extends(‘layout’) nos permite extender la vista que contiene el html en común que compartirán varias vistas. Y luego también tenemos que poner el contenido html entre @section(‘contenido’) y @endsection. Si nos damos cuenta la palabra contenido que esta aqui: @section(‘contenido’) , debe coincidir con la directiva @yield(‘contenido ‘) de nuestro layout. Hacemos los mismo con contacto.blade.php
1
2
3
4
@extends('layout')
@section('contenido')
<h1>Contacto</h1>
@endsection
Guardamos los cambios, iniciamos el servidor con
php artisan serve y abrimos en el navegador http://127.0.0.1:8000/ y comprobamos como funciona todo. Las vistas extienden al layout y tenemos un solo punto de entrada para agregar los css, javascripts y mas.
Pero eso no es todo, la directiva @section también acepta strings en vez de html, vamos a modificar un poco el layout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html>
<html>
<head>
<title>@yield('titulo')</title>
</head>
<body>
<nav>
<ul>
<li>
<a href="/">Home</a>
</li>
<li>
<a href="/contacto">Contacto</a>
</li>
</ul>
</nav>
<div class="content">
@yield('contenido')
</div>
</body>
</html>
Vemos que hemos agregado esto @yield(‘titulo’) . Ahora vamos a bienvenidos.blade.php y lo modificamos así:
1
2
3
4
5
6
7
@extends('layout')
@section('titulo','Pagina de Bienvenida')
@section('contenido')
<h1>Bienvenidos</h1>
@endsection
Con @section(‘titulo’,’Pagina de Bienvenida’) esto se inyectara en la etiqueta <title></title> de nuestra pagina. Lo mismo podemos hacer con contacto.blade.php
1
2
3
4
5
6
7
@extends('layout')
@section('titulo','Pagina de Contacto')
@section('contenido')
<h1>Contacto</h1>
@endsection
Algo adicional que podemos hacer es poner un valor por defecto a @yield en caso en nuestra vista no tengamos el @section correspondiente, se hace de esta forma @yield(‘titulo’,’Valor por defecto’)
Eso es todo para este tutorial, esto recién comienza, estén atentos.
Vistas y Blade
Las vistas en Laravel son la parte pública que el usuario de nuestro sistema va a poder ver, se escriben en HTML junto con un motor de plantillas llamado Blade. Las vistas se encuentran ubicadas en la carpeta resources/views/ y Laravel por defecto trabaja con la idea de que tenemos que escribir la menor cantidad de código repetido, modularizar nuestro código en donde mas se pueda, y si esto lo aplicamos en nuestros modelos, controladores y demás partes de nuestro proyecto, entonces, ¿Por que no hacerlo tambien en las vistas?.
Laravel usa unos archivos que se llaman plantillas o templates que suelen ser nuestros archivos principales, que tienen los segmentos de código que se repiten en mas de una vista, como por ejemplo la barra de navegacion, un menú de opciones, la estructura del acomodo de nuestro proyecto, etc. y como deben de estar practicamente presentes en todos lados, no tiene sentido estarlos repitiendo en todas las vistas. Por defecto Laravel contiene un template llamado app.blade.php, usualmente los templates contienen el head del HTML, las ligas del CSS del sistema y una seccion exclusiva para los archivos Javascript.
Además de los templates, se cuentan con archivos que se llaman partials, estos archivos son pequeños segmentos de código que suelen ser usados comunmente en partes del sistema en especifico, como los formularios o secciones de mensajes, estos archivos surgen por el código que es mas pequeño que repetimos mucho pero no es lo suficientemente grande como para considerarlo un template.
Esto hace que las vistas de cada parte del proyecto, que suelen ser llamadas por una ruta o controlador sean mucho mas pequeñas que usando otro tipo de frameworks para desarrollo Web, y para poder unir todos estos archivos o piezas del rompecabezas usamos el motor de plantillas de Laravel llamado BLADE.
Antes de ver mas sobre el motor de plantillas Blade, veremos como trabajar con las Vistas y llamarlas desde una ruta, crearemos un vista simple con un archivo nuevo en la carpeta resources/views/ llamado saludo.blade.php con el siguiente código:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Vista ejemplo</title>
</head>
<body>
<h1>Hola mundo desde Laravel</h1>
</body>
</html>
Es un HTML simple con un titulo 1, ahora vamos a crear una ruta que nos muestre esta vista:
De esta forma con la función view() le estamos diciendo a Laravel que busque dentro de la carpeta resources/views/ la vista saludo.blade.php, por convension las vistas Laravel no necesita que especifiquemos la extension .blade.php, sino solo su nombre. Una vez hecho esto debemos ver este resultado o uno similar:
Continuando con el ejemplo de los Pasteles vamos a mandar a la vista el nombre de un pastel, dentro de la ruta saludo vamos a obtener el primer Pastel de chocolate de nuestra BD y a poner ese nombre en vez del mensaje. Para esto podemos usar el scope de sabor para obtener los pasteles de chocolate y despues decirle que con el metodo first() nos regrese el primer pastel y eso guardarlo en una variable, dejando la ruta de la siguiente forma:
De esta forma estamos diciendo a la ruta que nos regrese la vista saludo.blade.php con una variable llamada pastel, que es el nombre del pastel, pero esto por si solo no lo va a mostrar el navegador, solo va a mandar la variable, para que el navegador la muestre debemos agregar un titulo donde este esa variable de esta forma:
<h2>{{ $pastel }}</h2>
Esta linea va justo abajo del mensaje Hola mundo desde Laravel, y ahora si debemos de ver algo parecido a esto ya que nuestras BD tienen cosas diferentes y gracias a Faker ninguno de nuestros resultados deberia ser igual:
Ahora si bien usamos los caracteres de las dobles llaves y no sabemos bien que son, esto es parte de la sintaxis que ahora veremos con Blade.
Blade
Blade nos provee de muchas ventajas (asi como casi todo en Laravel), además de modularizar nuestras vistas de una forma sorprendente, tambien nos permite usar estructuras de control y variables de PHP directamente en ellas, aunque esto ya era posible antes usando las etiquetas de php, por ejemplo:
<?php echo $var ?>
<?= $var ?>
Pero esto además de ser un poco incomodo de escribir deja nuestras vistas mucho más difíciles de entender y sucias por la mezcla de tanto código.
Entonces para el ejemplo anterior usamos el siguiente código:
{{ $pastel }}
Esto es el equivalente a <?= $pastel ?> y aunque con un ejemplo tan sencillo no se ve demasiada diferencia, con lo siguiente podremos verificar la potencia de este motor de plantillas.
Usualmente las estructuras de control que conocemos las usamos en los archivos PHP dedicados al Back-end (lado del servidor), pero blade nos da una sintaxis muy comoda para este tipo de estructuras que con PHP plano son muy sucias e incomodas de usar.
Para cada una de estas estructuras como lo son If, else, elseif, for, foreach, etc., se antepone un @ para usar estas estructuras y listo!! eso en suficiente, pero a diferencia de como estamos a costumbrados de encapsular un grupo de sentencias o lineas de código con llaves { }, en blade definimos el fin de una estructura con un @end seguido del nombre de la estructura que usamos, por ejemplo:
<h1>Lista de pasteles</h1>
@foreach($pasteles as $pastel)
<h2>{{ $pastel->nombre }}</h2>
@endforeach
Entonces en la ruta donde regresamos solo un nombre de un pastel, podriamos regresar todos los pasteles y escribir una lista de todo los pasteles de un cierto sabor e imprimirla en la vista.
Un ejemplo para el if seria:
@if( $pasteles->count() > 10 )
<h1>Hay muchos Pasteles</h1>
@endif
<h1>Lista de pasteles</h1>
@foreach($pasteles as $pastel)
<h2>{{ $pastel->nombre }}</h2>
@endforeach
El if nos dice, si el numero de pasteles que recibimos es mayor a 10 entonces escribe el titulo Hay muchos Pasteles.
Esto aplica para todas las estructuras, su lógica es la misma pero solo cambia un poco su sintaxis, pero hace que el HTML quede mas limpio que si incrustaramos PHP plano dentro de nuestra vista.
Templates y Partials
Anteriormente hablabamos de templates y partials, describiremos un poco de como se trabaja con esta estructuras de Blade y sus beneficios:
Templates
Estos archivos como se menciona al principio del capítulo son plantillas que nos ahorran mucho código o leguaje HTML, y para usar un template se usa la sentencia:
@extends('template')
Claramente se tendria que sustituir la palabra template dentro de la sentencia extends por el nombre de la vista que va a funcionar como template o plantilla.
Un template es una vista como las demás, simplemente que dentro de ella se usan otras sentencias que nos va a permitir definir areas del archivo que se van a poder sustituir mas adelante dentro de otra vista si es que lo deseamos. Para esto se ocupa la sentencia:
@yield('nombre_seccion')
Para declarar una seccion que se va a rellenar en otro lugar:
@section('nombre_seccion')
que funciona de la misma forma que yield() con la diferencia que en la seccion puedes definir HTML por defecto en caso de no definir la seccion con un nuevo HTML.
Definiremos nuestra vista recien creada saludo.blade.php para que use un template, por defecto Laravel trae uno que se llama app.blade.php, ese es el que usaremos para este ejemplo.
El template app por defecto tiene definida un yield llamado content que significa contenido, por lo cual la lista de pasteles que tenemos la vamos a agregar en esta parte y la vista quedaria de la siguiente forma:
@extends('app')
@section('content')
<h1>Lista de pasteles</h1><br>
@if( $pasteles->count() > 10 )
<h2>Hay muchos Pasteles</h2><br>
@endif
@foreach($pasteles as $pastel)
<h4>{{ $pastel->nombre }}</h4>
@endforeach
@stop
Ahora nuestra vista ya no tiene el encabezado HTML normal ni las etiquetas <body> ni <html>, sino que estamos diciendo que vamos a extender del template app y que el yield content lo vamos a sustituir por nuestro propio contenido, cabe mencionar que aunque en el template se uso la sentencia yield('content'), al momento de sustituirla la vamos a cambiar por section('content'), por lo cual en todas las vistas hijas del template solo se va a definir secciones y el fin de esa seccion se va a declarar con la entencia @stop.
Ahora el resultado seria algo parecido a esto:
Nos podemos dar cuenta que cambiaron muchas cosas, ahora tenemos una barra de navegacion en la parte superior de la ventana y el debugbar en la parte inferior, además de que la tipografia ha cambiado. Esto es porque dentro del template app se estan agregando hojas de estilo CSS.
Partials
Continuaremos con los partials, basicamente es lo mismo que ya hemos visto pero con una sentencia mas que se llama include('nombre.partial'), la cual esta incluyendo o incrustando un archivo de HTML, podemos hacer un simil con los use de PSR-4 o los import de Java, a diferencia de que esto lo inlcuye justo en el lugar donde lo definimos.
Vamos a verlo con un ejemplo practico.
Dentro la actual vista saludo.blade.php, vamos a quitar todo el HTML Blade que definimos para crear esta lista pequeña de pasteles y lo vamos a guardar en nuevo archivo, para esto vamos a crear una carpeta llamada pasteles y dentro otra carpeta llamada partials, donde vamos a guardar la vista de nuestro nuevo partial, quedando la ruta de la siguiente forma: resources/views/pasteles/partials/.
Ahi vamos a crear un archivo llamado lista.blade.php y dentro de este archivo vamos a cortar el código de nuestra vista saludo, quedando asi:
<h1>Lista de pasteles</h1><br>
@if( $pasteles->count() > 10 )
<h2>Hay muchos Pasteles</h2><br>
@endif
<ul>
@foreach($pasteles as $pastel)
<li>{{ $pastel->nombre }}</li>
@endforeach
</ul>
Y nuestra vista saludo.blade.php quedaria de esta forma una vez que ya incluyamos nuestro partial:
Si todo lo hacemos bien nuestra vista en el navegador debe seguir viendose de la misma manera, pero si se dan cuenta ahora se encuentra mucho mas modular nuestro HTML, si la lista de Pasteles la necesitaramos en otra vista ahora solo necesitamos hacer un @include('pasteles.partials.lista') y con eso ya tendremos nuestra lista agregada en cualquier vista donde la necesitemos.
Resumen, Anotaciones e informacion adicional
Blade es un motor de plantillas potente que nos permite modularizar y estilizar a un gran nivel nuestro HTML.
Como recordatorio listaremos algunas de las sentencias de Blade junto con su funcion:
@extends('nombre_template'): Esta sentencia nos ayuda a decirle a una vista cual va a ser el template que se va a usar.
@yield('nombre'): Esta sentencia nos permite declarar un futuro section de nuestro HTML que se definira en las vistas que son heredadas y no puede agregarse algun tipo de contenido por defecto, este sólo se usa en archivos que toman el rol de Template .
@section('nombre'): Esta sentencia tiene dos usos dependiendo de que queremos declarar, el primero es que nos permite declarar como su nombre lo dice una sección dentro del template que puede tener un contenido por defecto que si no es redefinido en la vista que herede el template entonces aparecera; el segundo nos permite asignar el contenido en una seccion que fue declarada en nuestro template, es decir esta palabra section se usa tanto en el template como en las vistas hijas, una diferencia mas es que si se usa en el template entonces la seccion temina con un @show, pero si se usa en una vista hija entonces termina la seccion con un @stop.
@show: Esta sentencia se usa para decir donde termina el section definido en el template.
@parent: Esta sentencia nos ayuda a cargar el contenido por defecto de un section del template, esto podemos usarlo cuando queremos agregar mas contenido dentro pero sin alterar el contenido por defecto, es decir agregarle mas HTML, esta sentencia se usa dentro de un section, podemos hacer un simil con el super() de Java que sirve para llamar al contructor de la superclase de la que se hereda.
@stop: Esta sentencia nos permite decir donde termina un section cuando se usa el section dentro de las vistas hijas.
@include('ruta.nombre'): Esta sentencia nos agrega en el lugar donde sea usada un archivo blade.php que contiene un partial o fragmento parcial de HTML, si ese partial se encuentra en la raíz de las vistas no necesita mas que el nombre sin la extension blade.php, pero si esta dentro de, por ejemplo, la carpeta "views/admin/users/" llamado table.blade.php para poder ser incluido se usaría la ruta junto con el nombre quedando como @include('admin.users.table'), views no se contempla pues es la raiz de las vistas.
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:
1
2
3
4
publicfunctionindex()
{
returnview('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:
1
2
3
4
5
6
7
8
9
10
$users=[
'Joel',
'Ellie',
'Tess',
//...
];
returnview('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:
1
2
3
returnview('users')->with([
'users'=>$users
]);
Con with también podemos pasar las variables de forma individual:
1
2
3
returnview('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:
1
2
3
4
5
6
7
$users=[
...
];
$title='Listado de usuarios';
returnview('users',compact('users','title'));
Escapar código HTML
Laravel nos ofrece un helper llamado e que nos permite escapar HTML que podría ser insertado por los usuarios de nuestra aplicación, de manera de prevenir posibles ataques XSS:
Cuando realizamos consultas a la base de datos haciendo uso de Eloquent, generalmente hacemos uso de las “Where Clauses” para de manera sencilla obtener información según ciertos parámetros, por lo que haremos uso de dicha característica del ORM para ejemplificar el post del día de hoy. Ejemplos: Supongamos que desea filtrar las entradas creadas hoy, o cualquier otro día, podemos hacer lo siguiente: He visto gente haciéndolo con consultas sin procesar , como esta: $q->where(DB::raw("DATE(created_at) = '".date('Ymd')."'")); O sin consultas sin procesar por fecha y hora, así: $q->where('created_at', '>=', date('Ymd').' 00:00:00')); Afortunadamente, Laravel Query Builder ofrece una solución más elocuente : $q->whereDate('created_at', '=', date('Ymd')); En lugar de PHP date() puedes usar Carbon : $q->whereDate('created_at', '=', Carbon::today()-...
JavaScript es un lenguaje de programación de alto nivel que se utiliza principalmente para agregar funcionalidades interactivas a las páginas web. Es uno de los lenguajes de programación más populares y ampliamente utilizados en la actualidad, y se ejecuta en el lado del cliente (es decir, en el navegador web del usuario). JavaScript se utiliza para crear efectos dinámicos en las páginas web, como animaciones, formularios interactivos, menús desplegables, y mucho más. Además, también se puede utilizar para crear aplicaciones web completas y para trabajar con bases de datos y servidores web. En resumen, JavaScript es un lenguaje de programación esencial para cualquier desarrollador web que desee crear sitios y aplicaciones interactivas y dinámicas. Es posible aprender JavaScript jugando videojuegos. Existen muchos juegos educativos y plataformas de aprendizaje en línea que utilizan el lenguaje JavaScript para enseñar programación de manera divertida e interactiva. Estos juegos sue...
Como agregar un reloj a obs Como colocamos un reloj en obs. Primero descargamos el script datetime.lua del siguiente link:: https://obsproject.com/forum/resources/datetime-digital-clock.882/ Lo situamos en la carpeta de script de obs, la cual se encuentra en la siguiente ruta C:\Program Files\obs-studio\data\obs-plugins\frontend-tools\scripts Lo siguiente es quitar la extencion .txt y dejar solo la lua en el script. Después de ello ingresamos a obs, creamos una etiqueta texto y la enlazamos con el escript. Para ello vamos a herramientas, script. Seleccionamos el script que descargamos y lo enlazamos con la etiqueta que creamos. Fin. 1-Agregamos una etiqueta texto y la llamamos reloj:: 1-1 1-2 1-3 2-Descargamos el scripts datetime.lua 2-1 2-2 :El script se descargara con la extensión txt la cual debemos eliminar para que solo que de la extensión .lua 2-3 :El script se descargara con la extensión txt la cual debemos eliminar para que solo que de la extensión .lua 2-4::Si tu...
resources/views/y Laravel por defecto trabaja con la idea de que tenemos que escribir la menor cantidad de código repetido, modularizar nuestro código en donde mas se pueda, y si esto lo aplicamos en nuestros modelos, controladores y demás partes de nuestro proyecto, entonces, ¿Por que no hacerlo tambien en las vistas?.