All posts

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