Как я могу захватить содержимое, заключенное в пару пользовательских директив Blade? - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь написать пользовательскую директиву 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, обработать и затем вернуть их в представление?

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

1 Ответ

0 голосов
/ 27 августа 2018

Я нашел ответ вскоре после публикации этого вопроса.

Добавьте следующее к вашему 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

...