Кажется, что LaravelCollective / html достигает этого, регистрируя пользовательский обработчик с BladeCompiler::directive()
, так что это функция расширения, предоставляемая Blade. Поэтому безопасно использовать {{ }}
как для экранирования, так и для создания html элементов с помощью LaravelCollective.
Для справки приведен фрагмент из HtmlServiceProvider. php в LaravelCollective / Html о том, как это делается.
/**
* Register Blade directives.
*
* @return void
*/
protected function registerBladeDirectives()
{
$this->app->afterResolving('blade.compiler', function (BladeCompiler $bladeCompiler) {
$namespaces = [
'Html' => get_class_methods(HtmlBuilder::class),
'Form' => get_class_methods(FormBuilder::class),
];
foreach ($namespaces as $namespace => $methods) {
foreach ($methods as $method) {
if (in_array($method, $this->directives)) {
$snakeMethod = Str::snake($method);
$directive = strtolower($namespace).'_'.$snakeMethod;
$bladeCompiler->directive($directive, function ($expression) use ($namespace, $method) {
return "<?php echo $namespace::$method($expression); ?>";
});
}
}
}
});
}