Buscar..
Introducción
Laravel soporta el motor de plantillas Blade fuera de la caja. El motor de plantillas Blade nos permite crear plantillas maestras y plantillas infantiles para cargar contenido de plantillas maestras, podemos tener variables, bucles y declaraciones condicionales dentro del archivo Blade.
Vistas: Introducción
Las vistas, en un patrón MVC, contienen la lógica sobre cómo presentar los datos al usuario. En una aplicación web, normalmente se utilizan para generar el resultado HTML que se envía a los usuarios con cada respuesta. De forma predeterminada, las vistas en Laravel se almacenan en el directorio resources/views
.
Se puede llamar a una vista usando la función de ayuda de view
:
view(string $path, array $data = [])
El primer parámetro del ayudante es la ruta a un archivo de vista, y el segundo parámetro es una matriz opcional de datos para pasar a la vista.
Por lo tanto, para llamar a resources/views/example.php
, usaría:
view('example');
Puede ver los archivos en subcarpetas dentro del directorio resources/views
, como resources/views/parts/header/navigation.php
, usando la notación de puntos: view('parts.header.navigation');
Dentro de un archivo de vista, como resources/views/example.php
, puede incluir tanto HTML como PHP juntos:
<html>
<head>
<title>Hello world!</title>
</head>
<body>
<h1>Welcome!</h1>
<p>Your name is: <?php echo $name; ?></p>
</body>
</html>
En el ejemplo anterior (que no utiliza ninguna sintaxis específica de Blade), generamos la variable $name
. Para pasar este valor a nuestra vista, pasaríamos una matriz de valores al llamar al ayudante de vista:
view('example', ['name' => $name]);
o alternativamente, use el ayudante compact()
. En este caso, la cadena pasada a compact () corresponde al nombre de la variable que queremos pasar a la vista.
view('example', compact('name'));
CONVENIO DE NOMBRES PARA VARIABLES DE HOJA
Mientras se envían datos a la vista. Puede usar el underscore
para la variable
múltiples palabras variable
pero con -
laravel da error.
Al igual que éste, dará un error (aviso hyphen ( - )
dentro de la user-address
view('example',['user-address' => 'Some Address']);
La forma correcta de hacerlo será
view('example', ['user_address' => 'Some Address']);
Estructuras de Control
Blade proporciona una sintaxis conveniente para estructuras de control PHP comunes.
Cada una de las estructuras de control comienza con @[structure]
y termina con @[endstructure]
. Observe que dentro de las etiquetas, solo estamos escribiendo HTML normal e incluyendo variables con la sintaxis de Blade.
Condicionales
'Si' declaraciones
@if ($i > 10)
<p>{{ $i }} is large.</p>
@elseif ($i == 10)
<p>{{ $i }} is ten.</p>
@else
<p>{{ $i }} is small.</p>
@endif
'A menos que' declaraciones
(Sintaxis corta para 'si no'.)
@unless ($user->hasName())
<p>A user has no name.</p>
@endunless
Bucles
'While' loop
@while (true)
<p>I'm looping forever.</p>
@endwhile
Bucle 'Foreach'
@foreach ($users as $id => $name)
<p>User {{ $name }} has ID {{ $id }}.</p>
@endforeach
'Forelse' Loop
(Igual que el bucle 'foreach', pero agrega una directiva especial @empty
, que se ejecuta cuando la expresión de la matriz iterada sobre está vacía, como una forma de mostrar el contenido predeterminado).
@forelse($posts as $post)
<p>{{ $post }} is the post content.</p>
@empty
<p>There are no posts.</p>
@endforelse
Dentro de los bucles, estará disponible una variable especial $loop
, que contiene información sobre el estado del bucle:
Propiedad | Descripción |
---|---|
$loop->index | El índice de la iteración del bucle actual (comienza en 0). |
$loop->iteration | La iteración del bucle actual (comienza en 1). |
$loop->remaining | Las iteraciones de bucle restantes. |
$loop->count | El número total de elementos en la matriz que se está iterando. |
$loop->first | Si esta es la primera iteración a través del bucle. |
$loop->last | Si esta es la última iteración a través del bucle. |
$loop->depth | El nivel de anidamiento del bucle actual. |
$loop->parent | Cuando se encuentra en un bucle anidado, la variable de bucle principal. |
Ejemplo:
@foreach ($users as $user)
@foreach ($user->posts as $post)
@if ($loop->parent->first)
This is first iteration of the parent loop.
@endif
@endforeach
@endforeach
Desde Laravel 5.2.22, también podemos usar las directivas @continue
y @break
Propiedad | Descripción |
---|---|
@continue | Detenga la iteración actual y comience la siguiente. |
@break | Detener el bucle actual. |
Ejemplo:
@foreach ($users as $user)
@continue ($user->id == 2)
<p>{{ $user->id }} {{ $user->name }}</p>
@break ($user->id == 4)
@endforeach
Luego ( asumiendo que más de 5 usuarios están ordenados por ID y no falta ID ), la página se mostrará
1 Dave
3 John
4 William
Haciendo eco de las expresiones PHP
Cualquier expresión PHP entre llaves dobles {{ $variable }}
será echo
ed después de haber sido dirigido a través del e
función auxiliar . (Por lo tanto, los caracteres especiales html ( <
, >
, "
, '
, &
) se reemplazan de manera segura para las entidades html correspondientes.)
Haciendo eco de una variable
{{ $variable }}
Haciendo eco de un elemento en una matriz
{{ $array["key"] }}
Haciendo eco de una propiedad de objeto
{{ $object->property }}
Haciendo eco del resultado de una llamada de función
{{ strtolower($variable) }}
Comprobando la existencia
Normalmente, en PHP, para verificar si una variable está configurada e imprimirla usted haría
- Antes de PHP 7
<?php echo isset($variable) ? $variable : 'Default'; ?>
- Después de PHP 7 (usando el "operador de unión nula")
<?php echo $variable ?? 'Default'; ?>
Operador de cuchillas or
hace esto más fácil:
{{ $variable or 'Default' }}
Ecos crudos
Como se mencionó, la sintaxis de llaves dobles {{ }}
, se filtra a través de la función htmlspecialchars
de PHP, por seguridad (evitando la inyección maliciosa de HTML en la vista). Si desea evitar este comportamiento, por ejemplo, si está intentando generar un bloque de contenido HTML resultante de una expresión PHP, use la siguiente sintaxis:
{!! $myHtmlString !!}
Tenga en cuenta que se considera una práctica recomendada utilizar la sintaxis estándar {{ }}
para escapar de sus datos, a menos que sea absolutamente necesario. Además, cuando haga eco de contenido no confiable (es decir, contenido suministrado por los usuarios de su sitio), debe evitar el uso de {!! !!}
sintaxis.
Incluyendo vistas parciales
Con Blade, también puede incluir vistas parciales (llamadas 'parciales') directamente en una página así:
@include('includes.info', ['title' => 'Information Station'])
El código anterior incluirá la vista en 'views / includes / info.blade.php'. También pasará en una variable $title
con valor 'Estación de información'.
En general, una página incluida tendrá acceso a cualquier variable a la que tenga acceso la página que llama. Por ejemplo, si tenemos:
{{$user}} // Outputs 'abc123'
@include('includes.info')
Y 'includes / info.blade.php' tiene lo siguiente:
<p>{{$user}} is the current user.</p>
Entonces la página se renderizará:
abc123
abc123 is the current user.
Incluir cada
A veces, deseará combinar una declaración de include
con una instrucción de foreach
, y acceder a las variables desde dentro del bucle foreach en la inclusión. En este caso, use la directiva @each
de Blade:
@each('includes.job', $jobs, 'job')
El primer parámetro es la página a incluir. El segundo parámetro es la matriz para iterar sobre. El tercer parámetro es la variable asignada a los elementos de la matriz. La declaración anterior es equivalente a:
@foreach($jobs as $job)
@include('includes.job', ['job' => $job])
@endforeach
También puede pasar un cuarto argumento opcional a la directiva @each
para especificar la vista que se mostrará cuando la matriz esté vacía.
@each('includes.job', $jobs, 'job', 'includes.jobsEmpty')
Herencia de diseño
Un diseño es un archivo de vista, que se extiende por otras vistas que inyectan bloques de código en su elemento primario. Por ejemplo:
parent.blade.php
<html>
<head>
<style type='text/css'>
@yield('styling')
</style>
</head>
<body>
<div class='main'>
@yield('main-content')
</div>
</body>
</html>
child.blade.php
@extends('parent')
@section('styling')
.main {
color: red;
}
@stop
@section('main-content')
This is child page!
@stop
otherpage.blade.php:
@extends('parent')
@section('styling')
.main {
color: blue;
}
@stop
@section('main-content')
This is another page!
@stop
Aquí se ven dos páginas secundarias de ejemplo, cada una de las cuales se extiende al padre. Las páginas secundarias definen una @section
, que se inserta en el padre en la instrucción @yield
apropiada.
Así que la vista representada por View::make('child')
dirá "¡ Esta es una página secundaria! " En rojo, mientras que View::make('otherpage')
producirá el mismo html, excepto con el texto " This is another página! "en azul en su lugar.
Es común separar los archivos de vista, por ejemplo, tener una carpeta de diseños específicamente para los archivos de diseño y una carpeta separada para las distintas vistas individuales específicas.
Los diseños están diseñados para aplicar el código que debe aparecer en cada página, por ejemplo, agregando una barra lateral o encabezado, sin tener que escribir toda la plantilla de html en cada vista individual.
Las vistas se pueden ampliar repetidamente, es decir, page3 can @extend @extend('page2')
, y page2 can @extend @extend('page1')
.
El comando extender usa la misma sintaxis que se usa para View::make
y @include
, por lo que se accede a los layouts/main/page.blade.php
archivo layouts/main/page.blade.php
como layouts.main.page
.
Compartir datos a todas las vistas.
A veces necesitas configurar los mismos datos en muchas de tus vistas.
Usando View :: share
// "View" is the View Facade
View::share('shareddata', $data);
Después de esto, el contenido de $data
estará disponible en todas las vistas con el nombre $shareddata
.
View::share
se suele llamar en un proveedor de servicios, o tal vez en el constructor de un controlador, por lo que los datos solo se compartirán en las vistas devueltas por ese controlador.
Usando View :: compositor
Los compositores de vistas son devoluciones de llamada o métodos de clase que se llaman cuando se procesa una vista. Si tiene datos que desea vincular a una vista cada vez que se renderiza la vista, un compositor de vistas puede ayudarlo a organizar esa lógica en una única ubicación. Puede vincular directamente la variable a una vista específica o a todas las vistas.
Compositor basado en el cierre
use Illuminate\Support\Facades\View;
// ...
View::composer('*', function ($view) {
$view->with('somedata', $data);
});
Compositor basado en la clase
use Illuminate\Support\Facades\View;
// ...
View::composer('*', 'App\Http\ViewComposers\SomeComposer');
Al igual que con View::share
, es mejor registrar a los compositores en un proveedor de servicios.
Si va con el enfoque de clase de compositor, entonces tendría App/Http/ViewComposers/SomeComposer.php
con:
use Illuminate\Contracts\View\View;
class SomeComposer
{
public function compose(View $view)
{
$view->with('somedata', $data);
}
}
Estos ejemplos usan '*'
en el registro del compositor. Este parámetro es una cadena que coincide con los nombres de vista para los que se registra el compositor ( *
es un comodín). También puede seleccionar una vista única (por ejemplo, 'home'
) de un grupo de rutas en una subcarpeta (por ejemplo, 'users.*'
).
Ejecutar código PHP arbitrario
Aunque podría no ser apropiado hacer tal cosa en una vista si pretende separar las preocupaciones estrictamente, la directiva php
Blade permite una forma de ejecutar código PHP, por ejemplo, para establecer una variable:
@php($varName = 'Enter content ')
(igual que:)
@php
$varName = 'Enter content ';
@endphp
luego:
{{ $varName }}
Resultado:
Introducir contenido