Вы уверены что представление существует и является blade php файлом
Blade - простой, но мощный движок шаблонов, поставляемый с Laravel. В отличие от других популярных шаблонизаторов PHP, Blade не запрещает вам использовать простой PHP-код в ваших представлениях. Фактически, все представления Blade скомпилированы в простой PHP-код и кэшируются до тех пор, пока они не будут изменены, а это означает, что Blade практически не увеличивает накладные расходы на ваше приложение. Файлы блэйд-вида используют расширение файла и обычно хранятся в каталоге. .blade.php resources/views
Наследование шаблонов
Двумя основными преимуществами использования Blade являются наследование шаблонов и разделы . Для начала давайте рассмотрим простой пример. Сначала рассмотрим «мастер» макет страницы. Поскольку большинство веб-приложений поддерживают один и тот же общий макет на разных страницах, этот макет удобно определять как одно представление Blade:
Как видите, этот файл содержит типичную разметку HTML. Тем не менее, принять к сведению @section и директив. Директива, как следует из названия, определяет сечение содержания, в то время как директива используется для отображения содержимого данного раздела. @yield @section @yield
Теперь, когда мы определили макет для нашего приложения, давайте определим дочернюю страницу, которая наследует макет.
Расширение макета
При определении дочернего представления используйте директиву Blade, чтобы указать, какой макет дочернее представление должно «наследовать». Представления, расширяющие макет Blade, могут вводить контент в разделы макета с помощью директив. Помните, как видно из приведенного выше примера, содержимое этих разделов будет отображаться в макете с помощью : @extends @section @yield
В этом примере sidebar раздел использует директиву для добавления (а не перезаписи) содержимого к боковой панели макета. Директива будет заменено на содержимое макета , когда представление визуализируется. @parent @parent
В отличие от предыдущего примера, этот sidebar раздел заканчивается @endsection вместо @show . @endsection Директива будет определять только раздел в то время как @show будет определять и сразу выход из этой секции.
Директива также принимает значение по умолчанию , в качестве второго параметра. Это значение будет отображено, если получаемый раздел не определен: @yield
Блейд-представления могут быть возвращены из маршрутов с помощью глобального view помощника:
Компоненты и слоты
Компоненты и слоты обеспечивают аналогичные преимущества для разделов и макетов; однако, некоторые могут найти ментальную модель компонентов и слотов более легкой для понимания. Во-первых, давайте представим повторно используемый компонент «оповещения», который мы хотели бы использовать в нашем приложении:
Переменная будет содержать контент мы хотим ввести в компонент. Теперь, чтобы построить этот компонент, мы можем использовать директиву Blade: > @component
Иногда полезно определить несколько слотов для компонента. Давайте изменим наш компонент оповещения, чтобы добавить «заголовок». Именованные слоты могут отображаться путем «повторения» переменной, соответствующей их имени:
Теперь мы можем внедрить содержимое в указанный слот, используя @slot директиву. Любое содержимое, не входящее в @slot директиву, будет передано компоненту в $slot переменной:
Передача дополнительных данных в компоненты
Иногда вам может потребоваться передать дополнительные данные компоненту. По этой причине вы можете передать массив данных в качестве второго аргумента @component директиве. Все данные будут доступны для шаблона компонента в виде переменных:
Алиасинг компонентов
Если ваши компоненты Blade хранятся в подкаталоге, вы можете использовать псевдонимы для более легкого доступа. Например, представьте компонент Blade, который хранится в . Вы можете использовать метод для псевдонима компонента из в . Как правило, это должно быть сделано в методе вашего : resources/views/components/alert.blade.php component components.alert alert boot AppServiceProvider
После того, как компонент был псевдоним, вы можете отобразить его с помощью директивы:
Вы можете опустить параметры компонента, если у него нет дополнительных слотов:
Отображение данных
Вы можете отобразить данные, переданные в ваши представления Blade, заключив переменную в фигурные скобки. Например, учитывая следующий маршрут:
Вы можете отобразить содержимое name переменной следующим образом:
Операторы Blade автоматически отправляются через функцию PHP, чтобы предотвратить атаки XSS. > htmlspecialchars
Вы не ограничены отображением содержимого переменных, передаваемых в представление. Вы также можете повторить результаты любой функции PHP. Фактически, вы можете поместить любой PHP-код по вашему желанию в эхо-оператор Blade:
Отображение неэкранированных данных
По умолчанию операторы Blade автоматически отправляются через функцию PHP, чтобы предотвратить атаки XSS. Если вы не хотите, чтобы ваши данные были экранированы, вы можете использовать следующий синтаксис: > htmlspecialchars
Будьте очень осторожны при отображении контента, предоставленного пользователями вашего приложения. Всегда используйте escape-синтаксис с двойными фигурными скобками, чтобы предотвратить атаки XSS при отображении пользовательских данных.
Рендеринг JSON
Иногда вы можете передать массив вашему представлению с намерением отобразить его как JSON, чтобы инициализировать переменную JavaScript. Например:
Однако вместо ручного вызова json_encode вы можете использовать @json директиву Blade. @json Директива принимает те же аргументы, что и в PHP json_encode функции:
Вы должны использовать @json директиву только для визуализации существующих переменных в формате JSON. Шаблонирование Blade основано на регулярных выражениях, и попытки передать сложное выражение в директиву могут вызвать неожиданные сбои.
@json Директива также полезна для высева компонентов Vue или атрибутов: data-*
Использование @json атрибутов in требует, чтобы он был заключен в одинарные кавычки.
HTML Entity Encoding
По умолчанию Blade (и e помощник Laravel ) будут дважды кодировать сущности HTML. Если вы хотите отключить двойное кодирование, вызовите метод из метода вашего : Blade::withoutDoubleEncoding boot AppServiceProvider
Blade & JavaScript Framework
Поскольку многие JavaScript-фреймворки также используют «фигурные» скобки, чтобы указать, что данное выражение должно отображаться в браузере, вы можете использовать @ символ, чтобы сообщить механизму рендеринга Blade, что выражение должно остаться нетронутым. Например:
В этом примере @ символ будет удален Blade; однако выражение останется нетронутым движком Blade, что позволит ему вместо этого отображаться вашей средой JavaScript. >
@verbatim Директива
Если вы отображаете переменные JavaScript в большой части вашего шаблона, вы можете заключить HTML-код в @verbatim директиву, чтобы вам не приходилось ставить перед каждым оператором Blade echo префикс @ :
Управляющие структуры
В дополнение к наследованию шаблонов и отображению данных Blade также предоставляет удобные ярлыки для общих структур управления PHP, таких как условные операторы и циклы. Эти ярлыки обеспечивают очень чистый и лаконичный способ работы со структурами управления PHP, оставаясь при этом знакомыми своим аналогам PHP.
Вы можете построить if заявления , используя , , и директивы. Эти директивы функционируют идентично своим аналогам PHP: @if @elseif @else @endif
Для удобства Blade также предоставляет @unless директиву:
В дополнение к условным директивам, которые уже обсуждались, директивы @isset and @empty могут использоваться как удобные ярлыки для их соответствующих функций PHP:
Директивы аутентификации
В @auth и @guest директивы могут использоваться , чтобы быстро определить , если текущий пользователь проходит проверку подлинности или гость:
При необходимости вы можете указать защиту аутентификации, которую следует проверять при использовании директив @auth and @guest :
Директивы раздела
Вы можете проверить, содержит ли раздел содержимое, используя @hasSection директиву:
Переключение операторов
Заявления коммутатора могут быть построены с использованием , , , и директивы: @switch @case @break @default @endswitch
Loops
В дополнение к условным операторам Blade предоставляет простые директивы для работы со структурами циклов PHP. Опять же, каждая из этих директив функционирует идентично своим аналогам PHP:
При зацикливании вы можете использовать переменную цикла для получения ценной информации о цикле, например, находитесь ли вы в первой или последней итерации цикла.
При использовании циклов вы также можете завершить цикл или пропустить текущую итерацию:
Вы также можете включить условие с объявлением директивы в одну строку:
Переменная Loop
При зацикливании $loop переменная будет доступна внутри вашего цикла. Эта переменная обеспечивает доступ к некоторым полезным битам информации, таким как индекс текущего цикла и является ли это первой или последней итерацией цикла:
Если вы находитесь во вложенном цикле, вы можете получить доступ к $loop переменной родительского цикла через parent свойство:
$loop Переменная содержит также множество других полезных свойств:
Имущество | Описание |
---|---|
$loop->index | Индекс текущей итерации цикла (начинается с 0). |
$loop->iteration | Текущая итерация цикла (начинается с 1). |
$loop->remaining | Итерации, оставшиеся в цикле. |
$loop->count | Общее количество элементов в массиве, которое повторяется. |
$loop->first | Является ли это первой итерацией цикла. |
$loop->last | Является ли это последней итерацией цикла. |
$loop->even | Является ли это четной итерацией в цикле. |
$loop->odd | Является ли это нечетной итерацией в цикле. |
$loop->depth | Уровень вложенности текущего цикла. |
$loop->parent | Находясь во вложенном цикле, родительская переменная цикла. |
Комментарии
Blade также позволяет вам определять комментарии в ваших представлениях. Однако, в отличие от комментариев HTML, комментарии Blade не включаются в HTML, возвращаемый вашим приложением:
В некоторых ситуациях полезно встроить PHP-код в ваши представления. Вы можете использовать @php директиву Blade, чтобы выполнить блок простого PHP внутри вашего шаблона:
Хотя Blade предоставляет эту функцию, ее частое использование может быть сигналом о том, что в шаблон встроено слишком много логики.
Формы
Каждый раз, когда вы определяете HTML-форму в своем приложении, вы должны включить в форму скрытое поле токена CSRF, чтобы промежуточное ПО защиты CSRF могло проверить запрос. Вы можете использовать @csrf директиву Blade для генерации поля токена:
Поле метода
Ошибки валидации
Включая подвиды
Директива Blade позволяет вам включать представление Blade из другого представления. Все переменные, которые доступны для родительского представления, будут доступны для включенного представления: @include
Даже если включенное представление будет наследовать все данные, доступные в родительском представлении, вы также можете передать массив дополнительных данных во включенное представление:
Если вы попытаетесь создать несуществующее представление, Laravel выдаст ошибку. Если вы хотите включить представление, которое может присутствовать или не присутствовать, вы должны использовать директиву: @include @includeIf
Если вы хотите использовать представление в зависимости от заданного логического условия, вы можете использовать директиву: @include @includeWhen
Чтобы включить первое представление, которое существует из данного массива представлений, вы можете использовать includeFirst директиву:
Вы должны избегать использования __DIR__ и __FILE__ констант в ваших взглядах Клинка, так как они относятся к месту нахождения кэшируется, составитель зрения.
Псевдоним включает
Если ваши Blade-файлы хранятся в подкаталоге, вы можете создать псевдонимы для более легкого доступа. Например, представьте, что Blade- содержимое хранится со следующим содержимым: resources/views/includes/input.blade.php
Вы можете использовать include метод для псевдонима включения из в . Как правило, это должно быть сделано в методе вашего : includes.input input boot AppServiceProvider
Когда псевдоним включен, вы можете отобразить его, используя псевдоним в качестве директивы Blade:
Визуализация представлений для коллекций
Вы можете объединить циклы и включения в одну строку с помощью @each директивы Blade :
Первым аргументом является частичное представление, отображаемое для каждого элемента в массиве или коллекции. Второй аргумент - это массив или коллекция, для которой вы хотите выполнить итерацию, а третий аргумент - это имя переменной, которая будет назначена текущей итерации в представлении. Так, например, если вы выполняете итерации по массиву jobs , как правило, вы захотите получить доступ к каждому заданию в качестве job переменной в вашем частичном представлении. Ключ для текущей итерации будет доступен в качестве key переменной в вашем частичном представлении.
Вы также можете передать четвертый аргумент @each директиве. Этот аргумент определяет представление, которое будет отображаться, если данный массив пуст.
Представления, представленные через @each , не наследуют переменные от родительского представления. Если дочернее представление требует этих переменных, вы должны использовать и вместо этого. @foreach @include
Стеки
Blade позволяет перемещаться в именованные стеки, которые могут быть отображены в другом месте в другом представлении или макете. Это может быть особенно полезно для указания любых библиотек JavaScript, требуемых вашими дочерними представлениями:
Вы можете вставлять в стек столько раз, сколько необходимо. Чтобы отобразить полное содержимое стека, передайте имя стека в @stack директиву:
Если вы хотите добавить содержимое в начало стека, вы должны использовать @prepend директиву:
Сервисная инъекция
@inject Директива может быть использована для получения услуги от Laravel контейнера службы. Первый передаваемый аргумент @inject - это имя переменной, в которую будет помещена служба, а второй аргумент - имя класса или интерфейса службы, которую вы хотите разрешить:
Удлиняющий Blade
Blade позволяет вам определять свои собственные директивы, используя directive метод. Когда компилятор Blade встречает пользовательскую директиву, он вызывает предоставленный обратный вызов с выражением, которое содержит директива.
В следующем примере создается директива, которая форматирует данные , которые должны быть экземпляром : @datetime($var) $var DateTime
Как видите, мы будем связывать format метод с любым выражением, переданным в директиву. Итак, в этом примере окончательный PHP, сгенерированный этой директивой, будет:
После обновления логики директивы Blade вам необходимо удалить все кэшированные представления Blade. Кэшированные виды Blade могут быть удалены с помощью команды Artisan. view:clear
Пользовательские заявления If
Программирование пользовательской директивы иногда сложнее, чем необходимо при определении простых, пользовательских условных операторов. По этой причине Blade предоставляет метод, который позволяет быстро определять пользовательские условные директивы с помощью Closures. Например, давайте определим пользовательское условие, которое проверяет текущую среду приложения. Мы можем сделать это в методе нашего : Blade::if boot AppServiceProvider
Как только пользовательское условие было определено, мы можем легко использовать его в наших шаблонах:
Представления (views), они же макеты, содержат HTML-код, передаваемый вашим приложением. Это удобный способ разделения бизнес-логики и логики отображения информации. Представления находятся в каталоге resources/views . Простое представление выглядит примерно так:
Поскольку это представление хранится в resources/views/greeting.blade.php , мы можем вернуть его в браузер при помощи глобальной вспомогательной функции PHP view () примерно так:
Как видите, первый параметр, переданный вспомогательной функции PHP view () , соответствует имени файла представления в каталоге resources/views . Вторым параметром является массив данных, которые будут доступны для представления. В данном случае мы передаём переменную name , которая отображается в представлении с использованием синтаксиса Blade.
Конечно, представления могут быть и в поддиректориях resources/views . Для доступа к ним можно использовать «точечную» запись. Например, если ваше представление хранится в resources/views/admin/profile.blade.php , можно ссылаться на него вот так:
Определение существования представления
Если вам нужно определить, существует ли представление, вы можете использовать фасад View . Метод PHP exists () вернёт значение true , если представление существует:
Когда функция PHP view () вызывается без аргументов, она возвращает реализацию контракта Illuminate\Contracts\View\Factory , предоставляя вам доступ ко всем его методам.
Передача данных в представление
В предыдущих примерах вы увидели, что можете передать массив данных в представление:
Вы также можете передать массив данных в качестве второго параметра в функцию PHP view () :
Передавая данные таким способом PHP $data должен быть массивом с парами ключ/значение. Теперь эти данные можно получить в представлении, используя соответствующий ключ, подобно PHP <?php echo $key ; ?> . Альтернативой передаче всего массива данных в функцию PHP view () является использование метода PHP with () для добавления отдельных частей данных в представление:
Передача данных во все представления
Иногда вам нужно передать данные во все представления вашего приложения.
Это можно сделать с помощью метода PHP share () фасада представлений. Обычно вызов PHP share () располагается в методе PHP boot () сервис-провайдера. Вы можете вставить его в AppServiceProvider или создать отдельный сервис-провайдер для него:
Это можно сделать с помощью метода PHP share () фабрики представлений. Обычно вызов PHP share () располагается в методе PHP boot () сервис-провайдера. Вы можете вставить его в AppServiceProvider или создать отдельный сервис-провайдер для него:
У вас есть несколько способов: функция PHP view () , контракт Illuminate\Contracts\View\Factory или шаблон построителя представлений.
Например, используя функцию PHP view () :
Вы также можете использовать фасад View :
Этот код вы можете поместить в метод PHP boot () сервис-провайдера — либо общего сервис-провайдера приложения AppServiceProvider , либо своего собственного.
Получение представления по указанному пути файла
Вы можете взять файл представления по его полному пути в файловой системе:
Построители представлений
Построители (view composers) — функции обратного вызова или методы класса, которые вызываются, когда представление отрисовано. Если у вас есть данные, которые вы хотите привязать к представлению при каждой его отрисовке, то построители помогут вам выделить такую логику в отдельном месте.
Мы воспользуемся фасадом PHP view () для доступа к лежащей в основе реализации контракта Illuminate\Contracts\View\Factory :
Мы воспользуемся функцией PHP view () для доступа к лежащей в основе реализации контракта Illuminate\Contracts\View\Factory :
Мы будем использовать фасад View для того, чтобы получить доступ к реализации контракта Illuminate\Contracts\View\Factory :
Не забывайте, при создании нового сервис-провайдера для регистрации ваших построителей представлений, вам нужно будет добавить его в массив providers в конфигурационном файле config/app.php .
Непосредственно перед отрисовкой представления, метод построителя PHP compose () вызывается с экземпляром Illuminate\View\View (для версии 5.1 и ранее Illuminate\Contracts\View\View ). Вы можете использовать метод PHP with () , чтобы привязать данные к представлению.
Все построители извлекаются из сервис-контейнера, поэтому вы можете указать необходимые зависимости в конструкторе построителя — они будут автоматически поданы ему.
Построители представлений по маске
Вы можете присоединить построитель к нескольким представлениям сразу, передав массив в качестве первого аргумента метода PHP composer () :
Конечно, нецелесообразно возвращать целые строки HTML-документов непосредственно из ваших маршрутов и контроллеров. К счастью, шаблоны предоставляют удобный способ разместить весь наш HTML в отдельных файлах. Шаблоны отделяют логику контроллера / приложения от логики представления и хранятся в каталоге resources/views . Простой шаблон может выглядеть примерно так:
Поскольку этот шаблон сохранен в resources/views/greeting.blade.php , мы можем вернуть его, используя глобальный помощник view , например:
Ищете дополнительную информацию о том, как писать шаблоны Blade? Ознакомьтесь с полной документацией по Blade, чтобы начать работу.
Создание и отрисовка шаблонов
Вы можете создать шаблон, поместив файл с расширением .blade.php в каталог resources/views вашего приложения. Расширение .blade.php сообщает фреймворку, что файл содержит шаблон Blade. Шаблоны Blade содержат HTML, а также директивы Blade, которые позволяют легко выводить значения, создавать операторы «если», выполнять итерацию данных и многое другое.
После того, как вы создали шаблон, вы можете вернуть его из маршрута или контроллера вашего приложения, используя глобальный помощник view :
Шаблон также могут быть возвращены с помощью фасада View :
Как видно, первый аргумент, переданный помощнику view , соответствует имени файла шаблона в каталоге resources/views . Второй аргумент – это массив данных, которые должны быть доступны в шаблоне. В этом случае, мы передаем переменную name , которая будет выведена в шаблоне с использованием синтаксиса Blade.
Вложенные каталоги шаблонов
Шаблоны также могут быть вложены в подкаталоги каталога resources/views . «Точечная нотация» используется для указания вложенности шаблона. Например, если ваш шаблон хранится в resources/views/admin/profile.blade.php , то вы можете вернуть его из маршрута / контроллера вашего приложения следующим образом:
Имена каталогов шаблонов не должны содержать символа . .
Использование первого доступного шаблона
Используя метод first фасада View , вы можете отобразить первый шаблон, который существует в переданном массиве шаблонов. Это может быть полезно, если ваше приложение или пакет позволяют настраивать или перезаписывать шаблоны:
Определение наличия шаблона
Если вам нужно определить, существует ли шаблон, вы можете использовать фасад View . Метод exists вернет true , если он существует:
Передача данных шаблону
Как вы видели в предыдущих примерах, вы можете передать массив данных шаблонам, чтобы сделать эти данные доступными для них:
При передаче информации таким образом данные должны быть массивом с парами ключ / значение. После предоставления данных в шаблон вы можете получить доступ к каждому значению, используя ключи данных, схожее с <?php echo $name; ?> .
В качестве альтернативы передаче полного массива данных вспомогательной функции view вы можете использовать метод with для добавления некоторых данных в шаблон. Метод with возвращает экземпляр объекта представления, так что вы можете продолжить связывание методов перед возвратом шаблона:
Общедоступные данные для всех шаблонов
Иногда требуется сделать данные общедоступными для всех шаблонов, отображаемыми вашим приложением. Вы можете сделать это, используя метод share фасада View . Как правило, вызов метода share осуществляется в методе boot поставщика служб. Вы можете добавить их в класс App\Providers\AppServiceProvider или создать отдельного поставщика для их размещения:
Компоновщики шаблонов
Компоновщики шаблонов – это замыкания или методы класса, которые вызываются при отрисовки шаблонов. Если у вас есть данные, которые вы хотите привязать к шаблону каждый раз при его отрисовки, компоновщик шаблонов поможет вам организовать эту логику в одном месте. Компоновщики шаблонов особенно полезны, если один и тот же шаблон возвращается несколькими маршрутами или контроллерами в вашем приложении и всегда требует определенного фрагмента данных.
Как правило, компоновщики шаблонов регистрируются в одном из поставщиков служб вашего приложения. В этом примере мы предположим, что мы создали новый App\Providers\ViewServiceProvider для размещения этой логики.
Помните, что если вы создаете нового поставщика служб, который будет содержать регистрации вашего компоновщика, вам нужно будет добавить поставщика служб в массив providers в файле конфигурации config/app.php .
Как видите, все компоновщики внедряются через контейнер служб, поэтому вы можете указать любые зависимости, которые вам нужны, в конструкторе компоновщика.
Связывание компоновщика с несколькими шаблонами
Вы можете связать компоновщика с несколькими шаблонами одновременно, передав массив шаблонов в качестве первого аргумента методу composer :
Допускается использование метасимвола подстановки * , что позволит вам прикрепить компоновщик ко всем шаблонам:
Создатели шаблонов
«Создатели» шаблонов очень похожи на компоновщиков; но, они выполняются сразу после создания экземпляра, а не ожидают отрисовки шаблона. Чтобы зарегистрировать создателя шаблона, используйте метод creator :
Оптимизация шаблонов
По умолчанию шаблоны Blade компилируются по требованию. Когда выполняется запрос, который отрисовывает шаблон, Laravel определит, существует ли скомпилированная версия шаблона. Если файл существует, Laravel далее определит, был ли исходный шаблон изменен позднее скомпилированного. Если скомпилированного шаблона либо не существует, либо исходный шаблон был изменен, Laravel перекомпилирует шаблон.
Компиляция шаблонов во время запроса отрицательно влияет на производительность, поэтому Laravel содержит команду Artisan view:cache для предварительной компиляции всех шаблонов, используемых вашим приложением. Для повышения производительности вы можете выполнить эту команду как часть процесса развертывания:
От автора: в аббревиатуре MVC буква «V» обозначает «Представление». Laravel view разделяет логику приложения и логику представления. Представления хранятся в папке resources/views. Как правило, представление содержит HTML-код, который будет обслуживаться приложением.
Пример
Шаг 1 — Скопируйте следующий код и сохраните его в файле resources/views/test.php
Фреймворк Laravel. Быстрый старт
Получите курс и узнайте, как cоздать веб-приложение на фреймворке Laravel!
Шаг 3 – Перейдите по следующему URL-адресу, чтобы увидеть отображаемый результат. //localhost:8000/test
Шаг 4 – На экране вы должны увидеть следующее.
Передача данных в представление
При создании приложения может потребоваться передать в представление данные. Передайте массив в функцию хелпера представления. После передачи массива мы можем использовать ключ, чтобы получить значение по этому ключу в файле HTML.
Пример
Шаг 4 – Перейдите по следующему URL-адресу, чтобы увидеть результат. //localhost:8000/test
Шаг 5 – Вы должны получить следующее:
Совместное использование данных для всех представлений
Мы рассмотрели, как вы можете передать в представления данные, но в некоторых случаях нам необходимо передать данные во все представления. Laravel позволяет сделать это намного проще. Существует метод под названием share(), который можно использовать для этой цели. Метод share() принимает два аргумента, ключ и значение. Обычно метод share() можно вызвать из метода провайдера службы. Мы можем использовать любого провайдера службы, AppServiceProvider или собственного провайдера.
Читайте также: