Blade ::compileString()和嵌入式变量
这适用于我最新版本的Laravel 5.7。注意我是如何包含__env变量的,这样@include、@foreach等函数就可以工作了。 public static function renderBlade$string, $data = null { if $data { $
这适用于我最新版本的Laravel 5.7。注意我是如何包含__env变量的,这样@include、@foreach等函数就可以工作了。
public static function renderBlade($string, $data = null)
{
if (!$data) {
$data = [];
}
$data['__env'] = app(\Illuminate\View\Factory::class);
$php = Blade::compileString($string);
$obLevel = obgetlevel();
ob_start();
extract($data, EXTR_SKIP);
try {
eval('?' . '>' . $php);
} catch (Exception $e) {
while (obgetlevel() > $obLevel) {
obendclean();
}
throw $e;
} catch (Throwable $e) {
while (obgetlevel() > $obLevel) {
obendclean();
}
throw new FatalThrowableError($e);
}
return obgetclean();
}
原来我没有将参数数组传递给解析Blade结构的方法。我的假设是Mail::send方法负责使变量可用,它将变量作为第二个参数。我也不得不使用extract($args, EXTR_SKIP)。
$generated = Blade::compileString($string);
obstart(); extract($args, EXTRSKIP)
try
{
eval($generated);
}
catch (\Exception $e)
{
obgetclean(); throw $e;
}
$content = obgetclean();
return $content;
Discussion
No comments yet