Как я могу скомпилировать шаблон клипа из строки, а не файл вида, например, код ниже:
<?php $string = '<h2>{{ $name }}</h2>'; echo Blade::compile($string, array('name' => 'John Doe')); ?>
http://paste.laravel.com/ujL
Я нашел решение, расширив BladeCompiler.
<?php namespace Laravel\Enhanced; use Illuminate\View\Compilers\BladeCompiler as LaravelBladeCompiler; class BladeCompiler extends LaravelBladeCompiler { /** * Compile blade template with passing arguments. * * @param string $value HTML-code including blade * @param array $args Array of values used in blade * @return string */ public function compileWiths($value, array $args = array()) { $generated = parent::compileString($value); ob_start() and extract($args, EXTR_SKIP); // We'll include the view contents for parsing within a catcher // so we can avoid any WSOD errors. If an exception occurs we // will throw it out to the exception handler. try { eval('?>'.$generated); } // If we caught an exception, we'll silently flush the output // buffer so that no partially rendered views get thrown out // to the client and confuse the user with junk. catch (\Exception $e) { ob_get_clean(); throw $e; } $content = ob_get_clean(); return $content; } }
Небольшая модификация вышеприведенного скрипта. Вы можете использовать эту функцию внутри любого класса, не расширяя класс BladeCompiler.
public function bladeCompile($value, array $args = array()) { $generated = \Blade::compileString($value); ob_start() and extract($args, EXTR_SKIP); // We'll include the view contents for parsing within a catcher // so we can avoid any WSOD errors. If an exception occurs we // will throw it out to the exception handler. try { eval('?>'.$generated); } // If we caught an exception, we'll silently flush the output // buffer so that no partially rendered views get thrown out // to the client and confuse the user with junk. catch (\Exception $e) { ob_get_clean(); throw $e; } $content = ob_get_clean(); return $content; }
Я не использую лезвие таким образом, но я думал, что метод компиляции принимает только представление как аргумент.
Возможно, вы ищете:
Blade::compileString()
Это старый вопрос. Но я нашел пакет, который облегчает работу.
Laravel Blade String Compiler отображает шаблоны клинков со строкового значения. Проверьте документацию о том, как установить пакет.
Вот пример:
$template = '<h1>{{ $name }}</h1>'; // string blade template return view (['template' => $template], ['name' => 'John Doe']);