РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
26 of 1392 menu

Директива once

Директива once в Blade позволяет выполнить переданный код только один раз за весь процесс рендеринга, даже если шаблон используется несколько раз в одном запросе. Это особенно полезно для регистрации ресурсов, подключения стилей или скриптов, которые должны быть добавлены только один раз, независимо от того, сколько раз компонент или фрагмент шаблона вызывается в процессе построения страницы.

Директива принимает единственный параметр - замыкание (анонимную функцию), которое содержит код, подлежащий однократному выполнению. Laravel автоматически определяет уникальность вызова на основе содержимого шаблона и места вызова директивы.

Синтаксис

@once {{-- Code that will be executed only once --}} @endonce

Пример

Давайте рассмотрим пример, где директива once используется в повторяющемся компоненте, чтобы стили и скрипты были добавлены только один раз:

<div class="card"> <h3>{{ $title }}</h3> <p>{{ $content }}</p> </div> @once <link rel="stylesheet" href="css/card.css"> <script src="js/card.js"></script> @endonce

Пример

Директиву once можно использовать для регистрации глобальных объектов или выполнения тяжёлых операций однократно. Например, для инициализации вспомогательной переменной при рендеринге страницы:

<!DOCTYPE html> <html> <head> <title>App</title> @once <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="icon" href="favicon.ico"> @endonce </head> <body> @yield('content') </body> </html>

Пример

Вложенные вызовы once также работают корректно. Каждая директива обрабатывается независимо, и выполнение произойдёт только один раз для каждой из них. Рассмотрим пример с иерархией шаблонов и макетов:

<div class="modal"> <div class="modal-content"> {{ $slot }} </div> </div> @once @once <script> console.log('Inner once block'); </script> @endonce <script> console.log('Outer once block'); </script> @endonce

Пример

Директива once может быть полезна при использовании компонентов с подгрузкой ресурсов через CDN, чтобы избежать дублирования подключений. Покажем, как реализовать такой подход:

<table> <thead> <tr> <th>#</th> <th>Name</th> </tr> </thead> <tbody> @foreach($items as $item) <tr> <td>{{ $loop->iteration }}</td> <td>{{ $item }}</td> </tr> @endforeach </tbody> </table> @once <link rel="stylesheet" href="https://cdn.example.com/table.min.css"> <script src="https://cdn.example.com/table.min.js"></script> @endonce

Смотрите также

  • директива push,
    которая помещает данные в стек для последующего отображения
  • директива pushOnce,
    которая добавляет данные в стек однократно
  • директива stack,
    которая выводит содержимое стека
  • директива php,
    которая выполняет произвольный код PHP в шаблоне
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить