@photosho

Как передать в свою директиву Blade значение переменной?

Еще один вопрос по шаблонизатору Blade. Опять же, как и в прошлом примере, вывожу дату, форматированную средствами Carbon:

Blade::directive('date', function($expression) {
  return '<?php echo Carbon::ФУНКЦИЯ(' . $expression . '); ?>'
});


Директива должна работать следующим образом:

@date($date)

Проблема в следующем. Насколько я понимаю, функция возвращает PHP-код, который встраивается вместо директивы на страницу, после чего уже выполняется как обычная PHP-вставка ("$expression" в данном примере хранит в себе всего лишь имя переменной - "$date", но не ее значение). Но для использования функции внутри нее мне необходимо подключать к модулю класс "Carbon", и если он не подключен напрямую к отображению, вызывающему директиву, то возникает ошибка "Class not found".

Сейчас решаю проблему простым добавлением "use" к отображению, но это не видится правильным решением - необходимость подключения класса к каждому отображению вместе с вызовом директивы сильно снижает эффективность этого подхода. Можно ли каким-то образом передать внутрь описания директивы значение переменной, а не ее имя? Или есть другой выход из этой ситуации?
  • Вопрос задан
  • 411 просмотров
Решения вопроса 1
@photosho Автор вопроса
Пока решил проблему следующим кодом:

Blade::directive('date', function($expression) {
  return '<?php echo Carbon\Carbon::ФУНКЦИЯ(' . $expression . '); ?>'
});


То есть, добавляю путь к классу прямо перед выводом функции. Буду признателен за комментарии к данному способу - является ли он правильным/оптимальным и не принесет ли лишних проблем.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы