Я читал Laravel Клинок документации , и я не могу понять, как назначить переменные в шаблоне для последующего использования. Я не могу {{ $old_section = "whatever" }}
этого сделать, потому что это будет звучать «что угодно», и я этого не хочу.
Я понимаю, что могу сделать <?php $old_section = "whatever"; ?>
, но это не элегантно.
Есть ли лучший, элегантный способ сделать это в шаблоне Blade?
php
laravel
laravel-4
laravel-blade
duality_
источник
источник
<?php $old_section = "whatever"; ?>
. Я нахожу это вполне читабельным.Ответы:
Не рекомендуется делать это в виде, поэтому для него нет метки лезвия. Если вы хотите сделать это в своем блейд-представлении, вы можете просто открыть тег php, как вы его написали, или зарегистрировать новый блейд-тег. Просто пример:
источник
{?
вместо того, чтобы просто использовать нативный<?
?LARAVEL 5.5 и выше
Директива @php blade больше не принимает встроенные теги. Вместо этого используйте полную форму директивы:
LARAVEL 5.2 и выше
Вы можете просто использовать:
Или вы можете использовать его в выражении блока:
LARAVEL 5
Расширить лезвие вот так:
Затем выполните одно из следующих действий:
Быстрое решение: если вы ленивы, просто поместите код в функцию boot () AppServiceProvider.php.
Более хорошее решение: создать собственного поставщика услуг. См. Https://stackoverflow.com/a/28641054/2169147 о том, как расширить блейд в Laravel 5. Таким образом, немного больше работы, но хорошее упражнение о том, как использовать провайдеров :)
ЛАРАВЕЛ 4
Вы можете просто поместить приведенный выше код внизу app / start / global.php (или в любое другое место, если считаете, что это лучше).
После вышеуказанных изменений вы можете использовать:
определить переменную.
источник
@php(@i = 1)
или использовать его в выражении блока (закрыть с@endphp
)В Laravel-4, вы можете использовать синтаксис комментария шаблона для определения / установки переменных.
Синтаксис комментария есть
{{-- anything here is comment --}}
и он отображаетсялопасть двигатель как<?php /* anything here is comment */ ?>
поэтому с небольшой хитростью мы можем использовать его для определения переменных, например,
будет оказано лопастькак то,
<?php /* */$i=0;/* */ ?>
что устанавливает переменную для нас. Без изменения какой-либо строки кода.источник
<?php $i=0; ?>
Существует простой обходной путь, который не требует изменения какого-либо кода, и он работает в Laravel 4 также.
Вы просто используете оператор присваивания (
=
) в выражении, переданном в@if
оператор, вместо (например) оператора, такого как==
.Тогда вы можете использовать его везде, где вы можете использовать любую другую переменную
Единственным недостатком является то, что ваше назначение будет выглядеть как ошибка для кого-то, кто не знает, что вы делаете это в качестве обходного пути.
источник
Я сделаю это слишком сложным.
Просто используйте обычный PHP
donesies.
(или https://github.com/alexdover/blade-set тоже выглядит довольно просто)
Мы все как бы «взламываем» систему, устанавливая переменные в представлениях, так зачем же делать «взлом» более сложным, чем нужно?
Проверено в Laravel 4.
Еще одним преимуществом является то, что подсветка синтаксиса работает должным образом (раньше я использовал хак комментариев, и это было ужасно читать)
источник
Переменные можно задавать в шаблонизаторе Blade следующими способами:
1. Общая
переменная настройки блока PHP :
<?php $hello = "Hello World!"; ?>
Вывод:
{{$hello}}
2.
Переменная настройки блока Blade PHP :
@php $hello = "Hello World!"; @endphp
Вывод:
{{$hello}}
источник
Начиная с Laravel 5.2.23, у вас есть директива @php Blade , которую вы можете использовать inline или как блок block:
или
источник
Вы можете установить переменную в файле представления, но она будет напечатана так же, как вы ее установили. Во всяком случае, есть обходной путь. Вы можете установить переменную внутри неиспользуемого раздела. Пример:
Затем
{{ $yourVar }}
напечатает вYour value
любом месте, где вы хотите, но вы не получите вывод при сохранении переменной.РЕДАКТИРОВАТЬ: наименование раздела требуется, в противном случае будет выдано исключение.
источник
В Ларавеле 4:
Если вы хотите, чтобы переменная была доступна во всех ваших представлениях, а не только в вашем шаблоне,
View::share
это отличный способ ( больше информации в этом блоге ).Просто добавьте следующее в app / controllers / BaseController.php
и теперь
$myvar
будут доступны все ваши просмотры - включая ваш шаблон.Я использовал это, чтобы установить URL-адреса ресурсов для своих изображений.
источник
И вдруг ничего не появится. По моему опыту, если вам нужно сделать что-то подобное, подготовьте HTML-код в методе модели или сделайте некоторую реорганизацию вашего кода в массивы или что-то в этом роде.
Там никогда не бывает только 1 способ.
источник
$users = ...
, а что-то похожее$css_class = ...
, так что строго спроектируйте переменные, которые не принадлежат модели или контроллеру, как они определены дизайнером.В документе laravel https://laravel.com/docs/5.8/blade#php Вы можете сделать это следующим образом:
источник
Я собираюсь расширить ответ, данный @Pim.
Добавьте это в метод загрузки вашего AppServiceProvider
Таким образом, вы не предоставляете возможность писать любые выражения php.
Вы можете использовать эту директиву как:
источник
В Laravel 5.1, 5.2 :
https://laravel.com/docs/5.2/views#sharing-data-with-all-views
Редактировать файл:
/app/Providers/AppServiceProvider.php
источник
Вы можете использовать пакет, который я опубликовал: https://github.com/sineld/bladeset
Тогда вы легко устанавливаете свою переменную:
источник
Что касается моего элегантного способа, как следующий
И просто повторить вашу
$old_section
переменную.источник
Если у вас PHP 7.0:
Самый простой и эффективный способ - с назначением внутри скобок .
Правило простое: вы используете свою переменную более одного раза? Затем объявите это в первый раз, когда оно будет использовано в скобках, сохраняйте спокойствие и продолжайте.
И да, я знаю
@forelse
, это просто демо.Поскольку ваши переменные теперь объявляются как и когда они используются, нет необходимости в каких-либо обходных решениях.
источник
Я не думаю, что вы можете - но опять же, такая логика, вероятно, должна обрабатываться в вашем контроллере и передаваться в уже установленное представление.
источник
$previous_group_name
,$separator_printed
И т.д.app/controllers/BaseController.php
.Присвойте переменную шаблону блейда. Вот решения
Мы можем использовать
<?php ?>
тег на странице лезвияИЛИ
Мы можем использовать комментарий лезвия со специальным синтаксисом
источник
Взломать комментарии не очень читабельный способ сделать это. Редакторы также раскрасят его как комментарий, и кто-то может пропустить его при просмотре кода.
Попробуйте что-то вроде этого:
Он будет скомпилирован в:
... и делать задание и ничего не повторять.
источник
Лучше потренироваться определить переменную в Controller, а затем перейти к просмотру с помощью метода
compact()
или->with()
.В противном случае #TLGreg дал лучший ответ.
источник
Существует очень хорошее расширение для radic / blade-расширений Blade . После добавления вы можете использовать @set (имя_переменной, значение_переменной)
источник
Я искал способ присвоить значение ключу и использовать его много раз, на мой взгляд. В этом случае вы можете использовать
@section{"key", "value"}
в первую очередь, а затем вызывать@yield{"key"}
для вывода значения в других местах вашего представления или его дочернего элемента.источник
На мой взгляд, было бы лучше сохранить логику в контроллере и передать ее для использования. Это можно сделать одним из двух способов, используя метод View :: make. В настоящее время я использую Laravel 3, но я почти уверен, что в Laravel 4 то же самое.
или
Метод «с» является цепным. Затем вы должны использовать вышесказанное так:
Больше информации здесь:
http://three.laravel.com/docs/views
http://codehappy.daylerees.com/using-controllers
источник
$format='Y-m-d H:i:s';
таким образом, вы можете повторно использовать этот формат в представлении. Это, конечно, не принадлежит контроллеру. Тем не менее, в ответ на вопрос ... В<?php ?>
тегах нет ничего плохого .У меня был похожий вопрос, и я нашел то, что я считаю правильным решением с View Composers
Композиторы представлений позволяют устанавливать переменные каждый раз, когда вызывается определенное представление, и они могут быть конкретными представлениями или шаблонами представления целиком. Во всяком случае, я знаю, что это не прямой ответ на вопрос (и на 2 года позже), но кажется, что это более изящное решение, чем установка переменных в представлении с блейдом.
источник
Вы можете легко сделать это. увидеть ниже
источник
Вы можете расширить лезвие, используя метод расширения, как показано ниже.
после этого инициализируйте переменные следующим образом.
источник
работает во всех версиях клинка.
источник