在我看来我有这段代码:
{{L::getSomeContent('content')}}
此方法从数据库返回内容。我的问题是,是否可以直接从数据库返回并渲染 Blade?比如我在数据库中存入了:
<img src"{{asset('somepath')}}">
但是当直接从数据库中渲染这些数据时,它只会显示为“%7%7”
我试过 Blade::compileString
最佳答案
我不想提出这个建议,但是 eval
在这种情况下会起作用。在使用它之前,您必须确保传递给它的内容不是用户输入。如果是,你必须对其进行清理(或者相信用户,如果可以在某种管理工具中更改内容)
除了使用这种方法,您或许应该考虑其他方式来组织您的内容。对于路径,您可以使用占位符并在输出前进行字符串替换。
无论如何,请注意:eval()
将执行任何通过的 PHP 代码。
这是一个工作示例。当然,您将它放在某种辅助函数中,以免弄乱您的 View 代码,但我会把它留给您。
<?php
$blade = L::getSomeContent('content');
$php = Blade::compileString($blade);
// remove php brackets because eval() doesn't like them
$php = str_replace(['<?php', '?>'], '', $php);
echo eval($php);
?>
正如我已经针对这个特殊情况( Assets 路径)提到的那样,您可以在您的内容中使用占位符。例如:
保存在数据库中
<img src"%ASSET%some/path">
然后在辅助函数内部和输出之前,将其替换为真实路径:
$content = L::getSomeContent('content');
$html = str_replace('%ASSET%', asset(''), $content);
关于php - 从数据库渲染 Blade ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28958423/