gpt4 book ai didi

Laravel 5 - 在服务器上使用 Blade API 编译字符串和插值

转载 作者:行者123 更新时间:2023-12-04 10:35:24 25 4
gpt4 key购买 nike

使用 Blade 服务容器,我想获取一个带有标记的字符串并将其编译下来,以便将其添加到 Blade 模板中,并进一步插入。

因此,我在从以下数据库检索的服务器上有一个电子邮件字符串(为简洁起见):

<p>Welcome {{ $first_name }},</p>

我希望它插值到
<p>Welcome Joe,</p> 

所以我可以将它作为 $content 发送到 Blade 模板并让它呈现所有内容和标记,因为 Blade 不会插入两次,现在我们的模板是客户端制作并存储在数据库中。
Blade::compileString(value)生产 <p>Welcome <?php echo e($first_name); ?>,</p> ,但我不知道如何让 $first_name 解析为 Joe在使用 Blade API 的字符串中,并且稍后不会在 Blade 模板中执行此操作。它只是在电子邮件中将其显示为带有 PHP 分隔符的字符串,例如:
<p>Welcome <?php echo e($first_name); ?>,</p>

有什么建议?

最佳答案

这应该这样做:

// CustomBladeCompiler.php

use Symfony\Component\Debug\Exception\FatalThrowableError;

class CustomBladeCompiler
{
public static function render($string, $data)
{
$php = Blade::compileString($string);

$obLevel = ob_get_level();
ob_start();
extract($data, EXTR_SKIP);

try {
eval('?' . '>' . $php);
} catch (Exception $e) {
while (ob_get_level() > $obLevel) ob_end_clean();
throw $e;
} catch (Throwable $e) {
while (ob_get_level() > $obLevel) ob_end_clean();
throw new FatalThrowableError($e);
}

return ob_get_clean();
}
}

用法:
$first_name = 'Joe';
$dbString = '<p>Welcome {{ $first_name }},</p>';

return CustomBladeCompiler::render($dbString, ['first_name' => $first_name]);

感谢 @tobiaLaracasts forums .

关于Laravel 5 - 在服务器上使用 Blade API 编译字符串和插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39801582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com