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



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow