Поиск…
Вступление
Laravel поддерживает Blade templating engine из коробки. Механизм шаблонов Blade позволяет создавать мастер-шаблоны и шаблоны для детей, загружая контент из мастер-шаблонов, мы можем иметь переменные, циклы и условные операторы внутри файла клика.
Просмотры:
Виды, в шаблон MVC, содержит логику о том , как представить данные пользователю. В веб-приложении обычно они используются для генерации вывода HTML, который отправляется обратно пользователям с каждым ответом. По умолчанию представления в Laravel хранятся в каталоге resources/views
.
Вид можно вызвать с помощью вспомогательной функции view
:
view(string $path, array $data = [])
Первый параметр помощника - это путь к файлу представления, а второй параметр - необязательный массив данных для передачи в представление.
Поэтому, чтобы вызвать resources/views/example.php
, вы должны использовать:
view('example');
Просмотр файлов в подпапках в каталоге resources/views
, таких как resources/views/parts/header/navigation.php
, можно вызвать с помощью точечной нотации: view('parts.header.navigation');
В файле вида, например resources/views/example.php
, вы можете включать как HTML, так и PHP вместе:
<html>
<head>
<title>Hello world!</title>
</head>
<body>
<h1>Welcome!</h1>
<p>Your name is: <?php echo $name; ?></p>
</body>
</html>
В предыдущем примере (который не использует специальный синтаксис Blade) мы выводим переменную $name
. Чтобы передать это значение нашему представлению, мы передадим массив значений при вызове помощника вида:
view('example', ['name' => $name]);
или, альтернативно, используйте помощник compact()
. В этом случае строка, переданная в compact (), соответствует имени переменной, которую мы хотим передать в представление.
view('example', compact('name'));
НАИМЕНОВАЯ КОНВЕНЦИЯ ДЛЯ ПЕРЕМЕННЫХ ЛЕКАРСТВ
При отправке данных назад для просмотра. Вы можете использовать underscore
для многословной variable
но с -
laravel дает ошибку.
Как и этот, вы получите сообщение об ошибке (отметьте hyphen ( - )
в user-address
view('example',['user-address' => 'Some Address']);
Правильный способ сделать это будет
view('example', ['user_address' => 'Some Address']);
Контрольные структуры
Blade обеспечивает удобный синтаксис для общих структур управления PHP.
Каждая из структур управления начинается с @[structure]
и заканчивается @[endstructure]
. Обратите внимание, что в тегах мы просто вводим обычный HTML и включаем переменные с синтаксисом Blade.
Conditionals
Заявления «Если»
@if ($i > 10)
<p>{{ $i }} is large.</p>
@elseif ($i == 10)
<p>{{ $i }} is ten.</p>
@else
<p>{{ $i }} is small.</p>
@endif
«За исключением»
(Короткий синтаксис для 'if not'.)
@unless ($user->hasName())
<p>A user has no name.</p>
@endunless
Loops
Цикл «Пока»
@while (true)
<p>I'm looping forever.</p>
@endwhile
Цикл «Foreach»
@foreach ($users as $id => $name)
<p>User {{ $name }} has ID {{ $id }}.</p>
@endforeach
Петля Forelse
(То же, что и цикл foreach, но добавляет специальную директиву @empty
, которая выполняется, когда выражение массива, @empty
которого пуста, является способом отображения содержимого по умолчанию).
@forelse($posts as $post)
<p>{{ $post }} is the post content.</p>
@empty
<p>There are no posts.</p>
@endforelse
Внутри циклов будет доступна специальная переменная $loop
, содержащая информацию о состоянии цикла:
Имущество | Описание |
---|---|
$loop->index | Индекс текущей итерации цикла (начинается с 0). |
$loop->iteration | Текущая итерация цикла (начинается с 1). |
$loop->remaining | Оставшиеся итерации цикла. |
$loop->count | Общее количество элементов в массиве, которое повторяется. |
$loop->first | Является ли это первой итерацией по циклу. |
$loop->last | Является ли это последней итерацией цикла. |
$loop->depth | Уровень вложенности текущего цикла. |
$loop->parent | Когда во вложенном цикле переменная цикла родителя. |
Пример:
@foreach ($users as $user)
@foreach ($user->posts as $post)
@if ($loop->parent->first)
This is first iteration of the parent loop.
@endif
@endforeach
@endforeach
Начиная с Laravel 5.2.22, мы также можем использовать директивы @continue
и @break
Имущество | Описание |
---|---|
@continue | Остановите текущую итерацию и запустите следующую. |
@break | Остановите текущий цикл. |
Пример :
@foreach ($users as $user)
@continue ($user->id == 2)
<p>{{ $user->id }} {{ $user->name }}</p>
@break ($user->id == 4)
@endforeach
Затем ( при условии, что 5+ пользователей сортируются по ID, и идентификатор отсутствует ), страница будет отображать
1 Dave
3 John
4 William
Повторение выражений PHP
Любое выражение PHP в двойных фигурных скобках {{ $variable }}
будет echo
после выполнения функции e
helper . (Таким образом, специальные символы html ( <
, >
, "
, '
, &
) безопасно заменены для соответствующих html-объектов.) (Выражение PHP должно оцениваться в строке, иначе будет выбрано исключение).
Повторение переменной
{{ $variable }}
Повторение элемента в массиве
{{ $array["key"] }}
Повторение свойства объекта
{{ $object->property }}
Повторение результата вызова функции
{{ strtolower($variable) }}
Проверка наличия
Обычно, в PHP, чтобы проверить, установлена ли переменная и распечатывать ее, вы должны делать
- Перед PHP 7
<?php echo isset($variable) ? $variable : 'Default'; ?>
- После PHP 7 (с использованием оператора «Null coalescing»)
<?php echo $variable ?? 'Default'; ?>
Оператор Blade or
делает это проще:
{{ $variable or 'Default' }}
Сырые эхо
Как уже упоминалось, регулярный синтаксис двойных фигурных скобок {{ }}
фильтруется через функцию htmlspecialchars
PHP для обеспечения безопасности (предотвращая вредоносную инъекцию HTML в представление). Если вы хотите обойти это поведение, например, если вы пытаетесь вывести блок содержимого HTML в результате выражения PHP, используйте следующий синтаксис:
{!! $myHtmlString !!}
Обратите внимание, что рекомендуется использовать стандартный синтаксис {{ }}
для исключения ваших данных, если это абсолютно необходимо. Кроме того, при отражении ненадежного контента (то есть контента, предоставляемого пользователями вашего сайта) вам следует избегать использования {!! !!}
синтаксис.
Включая частичные виды
С Blade вы также можете включить частичные представления (называемые «частичные») прямо на страницу следующим образом:
@include('includes.info', ['title' => 'Information Station'])
В приведенном выше коде будет отображаться представление «views / includes / info.blade.php». Он также передается переменной $title
со значением «Information Station».
В общем, включенная страница будет иметь доступ к любой переменной, к которой имеет доступ вызывающая страница. Например, если у нас есть:
{{$user}} // Outputs 'abc123'
@include('includes.info')
И 'includes / info.blade.php' имеет следующее:
<p>{{$user}} is the current user.</p>
Затем страница отобразит:
abc123
abc123 is the current user.
Включить каждый
Иногда вам нужно объединить оператор include
инструкцией foreach
и получить доступ к переменным из цикла foreach в include. В этом случае используйте директиву @each
Blade:
@each('includes.job', $jobs, 'job')
Первый параметр - страница для включения. Второй параметр - это массив для перебора. Третий параметр - это переменная, назначенная элементам массива. Вышеприведенное утверждение эквивалентно:
@foreach($jobs as $job)
@include('includes.job', ['job' => $job])
@endforeach
Вы также можете передать необязательный четвертый аргумент директиве @each
чтобы указать представление, показывающее, когда массив пуст.
@each('includes.job', $jobs, 'job', 'includes.jobsEmpty')
Наложение макета
Макет - это файл вида, который расширяется другими представлениями, которые вводят блоки кода в их родительский. Например:
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
Здесь вы видите две примерные дочерние страницы, каждая из которых расширяет родительский элемент. На дочерних страницах определяется @section
, которое вставлено в родительский @yield
в соответствующий оператор @yield
.
Таким образом, представление, представленное View::make('child')
будет View::make('otherpage')
страница! » В красном цвете, а View::make('otherpage')
создаст тот же html, кроме как с текстом « Это другое страница! "вместо синего.
Обычно отдельные файлы просмотра, например, имеют папку макетов специально для файлов макета, и отдельную папку для различных конкретных индивидуальных представлений.
Макеты предназначены для применения кода, который должен отображаться на каждой странице, например, добавить боковую панель или заголовок, без необходимости записывать все html-шаблоны в каждом отдельном представлении.
Представления могут быть продлен неоднократно - т.е. page3 может @extend('page2')
, и страница2 может @extend('page1')
.
Команда расширения использует тот же синтаксис, что и для View::make
и @include
, поэтому к файлам layouts/main/page.blade.php
обращается как layouts.main.page
.
Совместное использование данных во всех представлениях
Иногда вам нужно установить одни и те же данные во многих своих представлениях.
Использование View :: share
// "View" is the View Facade
View::share('shareddata', $data);
После этого содержимое $data
будет доступно во всех представлениях под именем $shareddata
.
View::share
обычно вызывается в поставщике услуг или, возможно, в конструкторе контроллера, поэтому данные будут совместно использоваться в представлениях, возвращаемых только этим контроллером.
Использование View :: composer
Просмотр композиторов - это обратные вызовы или методы класса, вызываемые при визуализации представления. Если у вас есть данные, которые вы хотите привязать к представлению каждый раз при визуализации представления, композитор представления может помочь вам организовать эту логику в одном месте. Вы можете напрямую привязать переменную к определенному виду или ко всем представлениям.
Композитор на основе Closure
use Illuminate\Support\Facades\View;
// ...
View::composer('*', function ($view) {
$view->with('somedata', $data);
});
Композитор на основе классов
use Illuminate\Support\Facades\View;
// ...
View::composer('*', 'App\Http\ViewComposers\SomeComposer');
Как и в случае с View::share
, лучше всего зарегистрировать композиторов в поставщике услуг.
Если вы собираетесь использовать подход класса композитора, у вас будет App/Http/ViewComposers/SomeComposer.php
с:
use Illuminate\Contracts\View\View;
class SomeComposer
{
public function compose(View $view)
{
$view->with('somedata', $data);
}
}
Эти примеры используют '*'
в регистрации композитора. Этот параметр представляет собой строку, которая соответствует именам представлений, для которых регистрируется композитор ( *
является подстановочным знаком). Вы также можете выбрать один вид (например, 'home'
) группы маршрутов под подпапкой (например, 'users.*'
).
Выполнить произвольный PHP-код
Хотя, возможно, было бы неправильно делать такую вещь в представлении, если вы намерены отдельно отнести проблемы, директива php
Blade позволяет реализовать PHP-код, например, для установки переменной:
@php($varName = 'Enter content ')
(такой же как:)
@php
$varName = 'Enter content ';
@endphp
потом:
{{ $varName }}
Результат:
Введите содержание