Поиск…


Вступление

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 }}

Результат:

Введите содержание



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow