Есть ли способ скомпилировать шаблон ножа из строки?

Как я могу скомпилировать шаблон клипа из строки, а не файл вида, например, код ниже:

<?php $string = '<h2>{{ $name }}</h2>'; echo Blade::compile($string, array('name' => 'John Doe')); ?> 

http://paste.laravel.com/ujL

Related of "Есть ли способ скомпилировать шаблон ножа из строки?"

Я нашел решение, расширив 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']);