Hola habrozhiteli! ¿Qué diferencia a Laravel de otros frameworks PHP? Velocidad y sencillez. El rápido desarrollo de aplicaciones, un extenso ecosistema y el kit de herramientas Laravel le permiten crear rápidamente sitios y aplicaciones con código limpio y legible.Matt Staffer, un reconocido maestro y desarrollador líder, ofrece una visión general del marco y ejemplos específicos de cómo trabajar con él. El libro ayudará a los desarrolladores experimentados de PHP a ingresar rápidamente un nuevo tema para implementar un proyecto en Laravel. La publicación también cubre los temas de Laravel Dusk and Horizon, recopila información sobre recursos de la comunidad y otros paquetes que no forman parte del núcleo de Laravel. En este libro encontrará: • Herramientas para recopilar, verificar, normalizar, filtrar datos de usuario • Blade, un potente motor de plantillas personalizadas de Laravel • Modelo ORM expresivo elocuente para trabajar con bases de datos de aplicaciones • Información sobre el papel del objeto Solicitud de iluminación en el ciclo de vida de la aplicación • PHPUnit, Burla y Dusk para probar su código PHP • Herramientas para escribir JSON y RESTful API • Interfaces para acceder al sistema de archivos, sesiones, cookies,cachés y búsqueda • Implementación de colas, trabajos, eventos y publicación de eventos WebSocketMotor de plantilla de cuchillas
PHP como lenguaje de plantilla funciona relativamente bien. Pero tiene sus inconvenientes, por lo que no puede usar <? Php en línea en todas partes. La mayoría de los marcos modernos tienen su propio lenguaje de plantilla.Laravel ofrece su propio motor de plantillas Blade basado en el motor .NET Razor. Tiene una sintaxis concisa, es bastante comprensible, acompañado de un modelo de herencia potente e intuitivo y de fácil extensibilidad.Puede familiarizarse rápidamente con el aspecto de Blade en el Ejemplo 4.1.Ejemplo 4.1 Ejemplos de cuchillas<h1>{{ $group->title }}</h1>
{!! $group->heroImageHtml() !!}
@forelse ($users as $user)
• {{ $user->first_name }} {{ $user->last_name }}<br>
@empty
No users in this group.
@endforelse
Como puede ver, el código Blade usa llaves para Echo y un acuerdo en el que sus etiquetas de usuario, llamadas "directivas", tienen el prefijo @. Aplicará directivas para todas sus estructuras de administración, así como para la herencia y las funciones personalizadas que desee agregar.La sintaxis de Blade es limpia y concisa, por lo que trabajar con ella es más fácil y más agradable que con otras alternativas. Pero en el momento en que necesita algo complicado en sus plantillas: herencia anidada, condiciones complejas o recursividad, el motor muestra su mejor lado. Al igual que los mejores componentes de Laravel, simplifica y permite el acceso a los requisitos de aplicaciones pesadas.Además, dado que toda la sintaxis de Blade se compila en código PHP normal y luego se almacena en caché, es rápido y le permite utilizar PHP nativo en sus archivos de este motor si lo desea. Sin embargo, recomendaría evitar el uso de PHP cuando sea posible; en general, si necesita hacer algo que no es posible con Blade o su directiva de usuario, esto no se aplica a la plantilla.Visualización de datos
Como puede ver en el ejemplo 4.1, los corchetes {{y}} se usan para ajustar el código PHP que le gustaría mostrar. El código {{$ $ variable}} actúa como <? = $ Variable?> En PHP simple.Sin embargo, hay una diferencia: Blade protege todas las asignaciones de forma predeterminada con la función PHP htmlentities () para proteger a sus usuarios de pegar scripts maliciosos. Esto significa que {{$ variable}} es funcionalmente equivalente a <? = Htmlentities ($ variable)?>. Si no desea escapar de la salida, use {!!! y en cambio.{{ }} -
, Blade ({{}}) -. Laravel , Blade Handlebars?
Blade {{ @. , , :
// Blade; $bladeVariable
//
{{ $bladeVariable }}
// @ "{{ handlebarsVariable }}"
//
@{{ handlebarsVariable }}
verbatim( http://bit.ly/2OnrPRP ).
Estructuras de gobierno
La mayoría de las estructuras de control en Blade serán familiares. Muchos duplican directamente el nombre y la estructura de la misma etiqueta en PHP.Hay algunos ayudantes para mayor comodidad, pero en general las estructuras de control se ven más limpias que en PHP.Construcciones condicionales
Considere la estructura lógica de la gestión.@if
La expresión @if ($ condición) en Blade compila a <? Php if ($ condición):?>.más, mássi y terminara si- Con exactamente el mismo estilo de sintaxis en PHP. Eche un vistazo alEjemplo 4.2 Ejemplo 4.2. @Simás, mássi y terminara si@if (count($talks) === 1)
There is one talk at this time period.
@elseif (count($talks) === 0)
There are no talks at this time period.
@else
There are {{ count($talks) }} talks at this time period.
@endif
Al igual que con las expresiones condicionales propias de PHP, puede mezclarlas y combinarlas como desee. No tienen una lógica particular; Hay un analizador con una búsqueda en la forma @if ($ condición) y reemplazo con el código PHP correspondiente.@unless @endunless
@unless, por otro lado, es una nueva sintaxis que no tiene un equivalente directo en PHP. Esto es lo contrario de @if. @unless ($ condition) es lo mismo que <? php if (! $ condition). Puedes ver esto en el ejemplo 4.3.Ejemplo 4.3 @unless y @endunless@unless ($user->hasPaid())
You can complete your payment by switching to the payment tab.
@endunless
Ciclos
A continuación, considere los ciclos.@for, @foreach @while
para, para cada y mientrastrabajar en Blade de la misma manera que en PHP (ejemplos 4.4–4.6).Ejemplo 4.4para y @endfor@for ($i = 0; $i < $talk->slotsCount(); $i++)
The number is {{ $i }}<br>
@endfor
Ejemplo 4.5 para cada y @endforeach@foreach ($talks as $talk)
• {{ $talk->title }} ({{ $talk->length }} minutes)<br>
@endforeach
Ejemplo 4.6. mientras y @endwhile@while ($item = array_pop($items))
{{ $item->orSomething() }}<br>
@endwhile
@forelse @endforelse
paraotra cosa es para cada, que se puede ejecutar incluso si el objeto que está buscando está vacío. Vimos esto en acción al comienzo del capítulo. El ejemplo 4.7 muestra otra opción.Ejemplo 4.7.paramás@forelse ($talks as $talk)
• {{ $talk->title }} ({{ $talk->length }} minutes)<br>
@empty
No talks this day.
@endforelse
$ LOOP VARIABLE EN DIRECTIVAS PARA CADAY las
directivas @FORELSEpara cada y paraelse (introducido en Laravel 5.3) agrega la variable $ loop, que no está disponible en los bucles foreach de PHP. Cuando se usa dentro de un buclepara cada o paraelse stdClass .
• index — 0 ; 0 — « ».
• iteration — 1 ; 1 — « ».
• remaining — , .
• count — .
• first — , , .
• last — , , .
• depth — «» : 1 , 2 . .
• parent — $loop , foreach; de lo contrario nulo.
Aquí hay un ejemplo de cómo funciona esto:
<ul>
@foreach ($pages as $page)
<li>{{ $loop->iteration }}: {{ $page->title }}
@if ($page->hasChildren())
<ul>
@foreach ($page->children() as $child)
<li>{{ $loop->parent->iteration }}
.{{ $loop->iteration }}:
{{ $child->title }}</li>
@endforeach
</ul>
@endif
</li>
@endforeach
</ul>
Herencia de plantilla
Blade proporciona un marco de herencia de plantillas que permite que las vistas se expandan, modifiquen e incluyan otras vistas.Veamos cómo se estructura la herencia con Blade.Definir secciones de una página utilizando las directivas @ section / @ show y rendimiento
Comencemos con el diseño de Blade de nivel superior, como en el Ejemplo 4.8. Esta es la definición de un envoltorio de página universal en el que luego colocaremos contenido específico de la página.Ejemplo 4.8. Estructura de la cuchilla<!-- resources/views/layouts/master.blade.php -->
<html>
<head>
<title>My Site | @yield('title', 'Home Page')</title>
</head>
<body>
<div class="container">
@yield('content')
</div>
@section('footerScripts')
<script src="app.js"></script>
@show
</body>
</html>
Esto se asemeja a una página HTML normal, pero puede ver el rendimiento en dos lugares (título y contenido), y definimos la sección en el tercero (footerScripts). Aquí tenemos tres directivas de Blade: solorendimiento('contenido'), rendimiento('título', 'Página de inicio') con el valor predeterminado y @ section / @ show con el contenido real.Aunque se ven un poco diferentes, funcionan esencialmente igual. Los tres determinan que hay una sección con un nombre (el primer parámetro) que se puede expandir más adelante, y qué hacer si la sección no se ha expandido. Lo hacen ya sea con una línea de retorno ('Página de inicio') o sin retorno (simplemente no se mostrará nada si la directiva no se expande) o con el retorno de todo el bloque (en este caso).¿Cuál es la diferencia? Arendimiento('contenido') sin contenido predeterminado. Además, enrendimiento('título') se mostrará solo si la directiva no se expande. De lo contrario, sus secciones secundarias no tendrán acceso programático al valor predeterminado. @ section / @ show define simultáneamente el valor predeterminado y hace que sus contenidos sean accesibles para sus hijos a través de @parent.Si tiene dicho diseño principal, puede expandirlo en un nuevo archivo de plantilla, como en el ejemplo 4.9.Ejemplo 4.9. Extensión de diseño de la cuchilla<!-- resources/views/dashboard.blade.php -->
@extends('layouts.master')
@section('title', 'Dashboard')
@section('content')
Welcome to your application dashboard!
@endsection
@section('footerScripts')
@parent
<script src="dashboard.js"></script>
@endsection
Esta vista secundaria nos permite mostrarle algunos conceptos nuevos de la herencia de Blade.@extends
En el ejemplo 4.9, usando @extends ('layouts.master'), determinamos que esta vista no debe mostrarse por sí misma, sino que extiende otra vista. Esto significa que su función es establecer el contenido de varias secciones, pero no trabajar solo. Más como una serie de bloques de contenido que una página HTML. La línea también determina que la vista que extiende se encuentra en resources / views / layouts / master.blade.php.Cada archivo debe expandir solo otro archivo y la llamada @extends debe ser la primera línea del archivo.@section @endsection
Usando @section ('title', 'Dashboard') proporcionamos nuestro contenido para la primera sección, title. Como el contenido es muy corto, en lugar de @section y @endsection utilizamos una forma abreviada. Esto le permite pasar contenido como el segundo parámetro @section y luego continuar. Si está un poco confundido con @section sin @endsection, puede usar la sintaxis habitual.Desde @section ('contenido') en adelante, usamos la sintaxis habitual para definir el contenido de la sección de contenido. Hasta que insertemos un pequeño saludo. Sin embargo, tenga en cuenta: cuando usa @section en una vista secundaria, termina con @endsection (o su aliasdetener) en su lugar show, que está reservado para definir secciones en vistas principales.@parent
Desde @section ('footerScripts') en adelante, usamos la sintaxis habitual para definir el contenido de la sección footerScripts.Recuerde que en realidad definimos este contenido (o al menos su "valor predeterminado") ya en el diseño principal. Así que esta vez tenemos dos opciones: sobrescribir el contenido de la vista principal o agregarlo.Puede ver que tenemos la capacidad de incluir contenido de la vista principal utilizando la directiva @parent dentro de esta sección. De lo contrario, el contenido de la sección se reescribirá completamente con todo lo que se define en el elemento primario de esta sección.Inclusión de componentes de presentación.
Ahora que hemos descubierto los conceptos básicos de la herencia, se pueden usar algunos trucos más.@include
¿Qué pasa si estamos en una vista y queremos usar otra? Quizás haya un botón de registro, que es conveniente volver a agregar en todo el sitio. Y tal vez quiero seleccionar el texto del botón cada vez que lo usamos. Eche un vistazo al ejemplo 4.10.Ejemplo 4.10. Incluir componentes de vista conincluir<!-- resources/views/home.blade.php -->
<div class="content" data-page-name="{{ $pageName }}">
<p>Here's why you should sign up for our app: <strong>It's Great.</strong></p>
@include('sign-up-button', ['text' => 'See just how great it is'])
</div>
<!-- resources/views/sign-up-button.blade.php -->
<a class="button button--callout" data-page-name="{{ $pageName }}">
<i class="exclamation-icon"></i> {{ $text }}
</a>
incluirlevanta un componente y le transfiere datos (opcional). Tenga en cuenta que no solo puede pasar explícitamente datos para su inclusión a través del segundo parámetroincluir, pero también se refieren a cualquier variable en el archivo incluido que esté disponible para la vista incluida (en este ejemplo, $ pageName). Puede hacer lo que quiera, pero recomendaría que, por claridad, pase siempre cada variable que tiene la intención de aplicar.También puedes usar directivasincluirSi incluirCuándo y incluirPrimero, como se muestra en el ejemplo 4.11.Ejemplo 4.11. Incluir vistas condicionales{{-- , --}}
@includeIf('sidebars.admin', ['some' => 'data'])
{{-- , true --}}
@includeWhen($user->isAdmin(), 'sidebars.admin', ['some' => 'data'])
{{-- --}}
@includeFirst(['customs.header', 'header'], ['some' => 'data'])
@each
Puede imaginar circunstancias en las que necesita iterar sobre una matriz, una colección y incluirparte para cada artículo. Hay una directiva para esto.cada.Digamos que tenemos un panel modular lateral y queremos incluir varios módulos con su propio nombre. Eche un vistazo al ejemplo 4.12.Ejemplo 4.12. Usar componentes de vista en un bucle concada<!-- resources/views/sidebar.blade.php -->
<div class="sidebar">
@each('partials.module', $modules, 'module', 'partials.empty-module')
</div>
<!-- resources/views/partials/module.blade.php -->
<div class="sidebar-module">
<h1>{{ $module->title }}</h1>
</div>
<!-- resources/views/partials/empty-module.blade.php -->
<div class="sidebar-module">
No modules :(
</div>
Considere la sintaxis cada. El primer parámetro es el nombre del componente de la vista. El segundo es una matriz o colección para la iteración. Tercero, el nombre de la variable bajo la cual cada elemento (en este caso, cada elemento en la matriz $ modules) se pasará a la vista. Y el cuarto parámetro opcional es una vista que muestra si la matriz o colección está vacía (o si lo desea, puede pasar una cadena aquí que se usará como plantilla).Usando pilas
La plantilla general es quizás difícil de administrar con el Blade básico, cuando cada vista en la jerarquía de Blade necesita agregar algo a una sección específica, de manera muy similar a agregar una entrada a una matriz.La situación más común es cuando ciertas páginas (y, en ocasiones, en un sentido más amplio, ciertas secciones del sitio) tienen archivos CSS y JavaScript únicos específicos que necesitan cargar. Imagine que tiene un archivo CSS "global" para todo el sitio, un archivo CSS para la sección de trabajo y un archivo CSS para la página "Obtener un trabajo".Las pilas de cuchillas están hechas para eso. En la plantilla principal, defina una pila de marcador de posición. Luego, en cada plantilla secundaria, puede "insertar" registros allí utilizandoempujar/ @ endpush, que los agrega al final de la pila en la imagen final. También puede usar @ prepend / @ endprepend para agregarlos al principio. El ejemplo 4.13 ilustra esto.Ejemplo 4.13. Usando pilas de cuchillas<!-- resources/views/layouts/app.blade.php -->
<html>
<head><!-- --></head>
<body>
<!-- -->
<script src="/css/global.css"></script>
<!-- , -->
@stack('scripts')
</body>
</html>
<!-- resources/views/jobs.blade.php -->
@extends('layouts.app')
@push('scripts')
<!-- - -->
<script src="/css/jobs.css"></script>
@endpush
<!-- resources/views/jobs/apply.blade.php -->
@extends('jobs')
@prepend('scripts')
<!-- - -->
<script src="/css/jobs--apply.css"></script>
@endprepend
Esto conduce al siguiente resultado:<html>
<head><!-- --></head>
<body>
<!-- -->
<script src="/css/global.css"></script>
<!-- , -->
<script src="/css/jobs--apply.css"></script>
<script src="/css/jobs.css"></script>
</body>
</html>
Usando componentes y ranuras
Laravel ofrece otra plantilla para incluir contenido entre vistas, que se introdujo en 5.4: componentes y ranuras. Los primeros son más efectivos en contextos cuando usas vistas de componentes y les pasas grandes porciones de contenido como variables. Mire el Ejemplo 4.14 para ver una ilustración de un modelo o información sobre herramientas que podría alertar al usuario de un error u otra acción.Ejemplo 4.14. Una ventana modal es un mal ejemplo de una vista de componente<!-- resources/views/partials/modal.blade.php -->
<div class="modal">
<div>{{ $content }}</div>
<div class="close button etc">...</div>
</div>
<!-- -->
@include('partials.modal', [
'body' => '<p>The password you have provided is not valid. Here are the rules
for valid passwords: [...]</p><p><a href="#">...</a></p>'
])
Esto es demasiado para una variable así y es ideal para un componente.Los componentes con ranuras son componentes de vistas que están diseñados para incluir grandes porciones ("ranuras") para recuperar contenido de una plantilla incluida. El ejemplo 4.15 muestra cómo realizar ingeniería inversa del código del ejemplo 4.14 utilizando componentes y ranuras.Ejemplo 4.15. Ventana modal como componente más adecuado con ranuras<!-- resources/views/partials/modal.blade.php -->
<div class="modal">
<div>{{ $slot }}</div>
<div class="close button etc">...</div>
</div>
<!-- -->
@component('partials.modal')
<p>The password you have provided is not valid.
Here are the rules for valid passwords: [...]</p>
<p><a href="#">...</a></p>
@endcomponent
Como puede ver en el ejemplo 4.15, la directiva componentele permite extraer nuestro código HTML de una cadena comprimida de una variable y vuelve al espacio de la plantilla. La variable $ slot en la plantilla de nuestro componente recibe cualquier contenido transferido acomponente.Ranuras compuestas
El método que utilizamos en el ejemplo 4.15 se llama la ranura "predeterminada"; todo lo que pasas entrecomponentey @endcomponent, pasado a la variable $ slot. Pero también puede tener más que solo una ranura predeterminada. Imagine una ventana modal con un título, como en el ejemplo 4.16.Ejemplo 4.16. Componente de una representación modal con dos variables.<!-- resources/views/partials/modal.blade.php -->
<div class="modal">
<div class="modal-header">{{ $title }}</div>
<div>{{ $slot }}</div>
<div class="close button etc">...</div>
</div>
Puedes usar la directiva espacio en sus desafíos componentepara transferir contenido a ranuras que no sean las predeterminadas, como se muestra en el Ejemplo 4.17.Ejemplo 4.17. Transferir más de una ranura a un componente@component('partials.modal')
@slot('title')
Password validation failure
@endslot
<p>The password you have provided is not valid.
Here are the rules for valid passwords: [...]</p>
<p><a href="#">...</a></p>
@endcomponent
Y si, en su opinión, hay otras variables que no tienen sentido como un espacio, aún puede pasar una matriz de contenido como el segundo parámetro para componente igual que con incluir. Eche un vistazo al ejemplo 4.18.Ejemplo 4.18. Pasar datos a un componente sin ranuras@component('partials.modal', ['class' => 'danger'])
...
@endcomponent
Nombrar un componente como directiva
Hay un truco para simplificar los componentes de la llamada: alias. Simplemente llame a Blade :: component () en la fachada de Blade, el más común es el método de arranque AppServiceProvider (), y pásele la ubicación del componente y luego el nombre de la directiva deseada, como se muestra en el Ejemplo 4.19.Ejemplo 4.19. Seudonimizar un componente como directiva
Blade::component('partials.modal', 'modal');
<!-- -->
@modal
Modal content here
@endmodal
»Se puede encontrar más información sobre el libro en el sitio web del editor» Contenido» Extracto deKhabrozhiteley 25% de descuento en el cupón - LaravelTras el pago de la versión en papel del libro, se envía un libro electrónico por correo electrónico.