Почему примеры директив Blade показывают эхо, а не просто возвращают строку?

Что я нашел в Интернете.

\Blade::directive('hello', function ($expression) {
    list($greet, $name) = explode(', ', $expression);

    return "<?php echo {$greet} . ' ' . {$name}; ?>";
});

Здесь чувствуется, что во время выполнения функция будет вызываться. Тогда почему бы просто не сделать

\Blade::directive('hello', function ($expression) {
    list($greet, $name) = explode(', ', $expression);

    return $greet . ' ' . $name;
});

Я видел много примеров, следующих шаблону return "<?php echo ...", и я действительно не понимаю сути.

РЕДАКТИРОВАТЬ, чтобы уточнить из комментариев и ответов, ключевые предположения выделены жирным шрифтом:

В первом примере $expression взрывается в функции, мне интересно, как Blade может динамически взрываться только из возвращаемого php-кода? Такой код заставляет меня поверить, что и директивная функция, и возвращаемый код выполняются при каждом рендеринге?

Во-вторых, если оператор return содержит открывающие теги PHP, я полагаю, что он обрабатывается как стандартный PHP-скрипт, так почему бы не вернуть строку?


person AsTeR    schedule 01.02.2018    source источник
comment
Следующий return "<?php echo {$greet} . ' ' . {$name}; ?>"; является окончательным результатом, который предполагает замену директивы. Если ты просто вернешься, то ничего не будет. Это ответственность вашего куратора делать то, что вы хотите.   -  person The Alpha    schedule 01.02.2018
comment
@TheAlpha Я внес небольшую правку, чтобы уточнить   -  person AsTeR    schedule 02.02.2018
comment
Происходит только один рендеринг, то есть рендеринг блейд-файла, который вы видите в браузере. Думайте об этом как о PHP-скрипте, который создает (динамический) PHP-скрипт.   -  person    schedule 02.02.2018


Ответы (1)


Строка, возвращаемая из директив, передается через Blade Compiler перед рендерингом. Он генерирует исполняемые файлы сценариев PHP, которые сервер может обрабатывать.

https://laravel.com/api/5.5/Illuminate/View/Compilers/BladeCompiler.html

Посмотрите на кэшированные файлы в storage/framework/views, чтобы увидеть конечный результат.

person Community    schedule 01.02.2018
comment
Спасибо, я внес правку в вопрос (проверю в кеше, чтобы лучше понять). - person AsTeR; 02.02.2018