Я пытаюсь написать собственную директиву Blade, которая может изменить содержимое и вернуть его, что-то вроде этого:
<div class="some-text">
@uppercase
This is a line of text.
@enduppercase
</div>
который будет отображаться в HTML следующим образом:
<div class="some-text">
THIS IS A LINE OF TEXT.
</div>
То, что я НЕ хочу знать, как сделать следующее:
@uppercase('This is a line of text')
Как я могу захватить весь контент в директивах start и end, обработать и затем вернуть их в представление?
Примечание: есть похожий вопрос Вот, с комментарием, ссылающимся на другой вопрос, который якобы имеет ответ, но на самом деле он не отвечает на вопрос, который я описал здесь.
Я нашел ответ вскоре после публикации этого вопроса.
Добавьте следующее к вашему AppServiceProvider::boot()
метод:
\Blade::directive('uppercase', function () {
return '<?php ob_start(); ?>';
});
\Blade::directive('enduppercase', function () {
return '<?php echo strtoupper(ob_get_clean()); ?>';
});
Я сослался на этот код для идеи: https://github.com/RobinRadic/blade-extensions/blob/master/src/Directives/EndspacelessDirective.php
Других решений пока нет …