Yii2 渲染数据库内容
Yii2 render database content
有一个文本区域,用户可以在其中编辑一些模板并可以使用如下变量:
{{model.user.name}}
应用程序需要用数据替换此变量并显示 HTML 输出。
我们可以编写一个小函数,用数据替换模板中的变量,但我们需要使用像 Twig 或 Smarty 这样的模板引擎。
https://github.com/yiisoft/yii2-twig
https://github.com/yiisoft/yii2-smarty
现在我们可以使用 Smarty 或 Twig 的 ViewRenderer。
$render = new ViewRenderer();
$content = $render->render($this->view,'template.twig',[
'model' => $model,
]);
但是我看到这个错误:
Unable to find template "template.twig" (looked into: .).
如何在 Yii2 中使用 Smarty 或 Twig 渲染包含数据库内容的模板?
您无需手动创建渲染器,而是配置您的应用程序组件,如下所示:
[
'components' => [
'view' => [
'class' => 'yii\web\View',
'renderers' => [
'twig' => [
'class' => 'yii\twig\ViewRenderer',
'cachePath' => '@runtime/Twig/cache',
// Array of twig options:
'options' => [
'auto_reload' => true,
],
'globals' => ['html' => '\yii\helpers\Html'],
'uses' => ['yii\bootstrap'],
],
// ...
],
],
],
]
您告诉 Yii 有一个渲染器可以处理扩展名为 .twig 的模板。
然后,您需要做的就是在控制器操作中调用渲染时添加 .twig
扩展:
public function actionIndex()
{
return $this->render('index.twig');
然后将您的树枝模板放入视图通常所在的视图文件夹中。
阅读 twig 扩展的文档:Twig Extension for Yii 2
如果您只想使用 twig 模板,您可以在设置默认扩展名的情况下避免指定扩展名 (.twig):
'components' => [
'view' => [
'defaultExtension' => 'twig',
我找到了 Mustache (https://github.com/bobthecow/mustache.php) 并且我是这样使用的:
$m = new \Mustache_Engine();
echo $m->render("Hello {{model.client.firma}}",['model' => $model]);
您应该创建一个 twig
组件,它将包围 Twig_Environment
。如果需要,您可以添加 yii\twig\Extension
扩展名。那么你应该这样使用它:
$renderedTemplate = Yii::$app->twig->render($template, $context);
如果您确实需要从字符串变量呈现模板,您可以实现自己的 Twig_LoaderInterface
。有一个 Twig_Loader_String
,但它已被弃用,您不应该使用它。
有一个文本区域,用户可以在其中编辑一些模板并可以使用如下变量:
{{model.user.name}}
应用程序需要用数据替换此变量并显示 HTML 输出。
我们可以编写一个小函数,用数据替换模板中的变量,但我们需要使用像 Twig 或 Smarty 这样的模板引擎。
https://github.com/yiisoft/yii2-twig https://github.com/yiisoft/yii2-smarty
现在我们可以使用 Smarty 或 Twig 的 ViewRenderer。
$render = new ViewRenderer();
$content = $render->render($this->view,'template.twig',[
'model' => $model,
]);
但是我看到这个错误:
Unable to find template "template.twig" (looked into: .).
如何在 Yii2 中使用 Smarty 或 Twig 渲染包含数据库内容的模板?
您无需手动创建渲染器,而是配置您的应用程序组件,如下所示:
[
'components' => [
'view' => [
'class' => 'yii\web\View',
'renderers' => [
'twig' => [
'class' => 'yii\twig\ViewRenderer',
'cachePath' => '@runtime/Twig/cache',
// Array of twig options:
'options' => [
'auto_reload' => true,
],
'globals' => ['html' => '\yii\helpers\Html'],
'uses' => ['yii\bootstrap'],
],
// ...
],
],
],
]
您告诉 Yii 有一个渲染器可以处理扩展名为 .twig 的模板。
然后,您需要做的就是在控制器操作中调用渲染时添加 .twig
扩展:
public function actionIndex()
{
return $this->render('index.twig');
然后将您的树枝模板放入视图通常所在的视图文件夹中。
阅读 twig 扩展的文档:Twig Extension for Yii 2
如果您只想使用 twig 模板,您可以在设置默认扩展名的情况下避免指定扩展名 (.twig):
'components' => [
'view' => [
'defaultExtension' => 'twig',
我找到了 Mustache (https://github.com/bobthecow/mustache.php) 并且我是这样使用的:
$m = new \Mustache_Engine();
echo $m->render("Hello {{model.client.firma}}",['model' => $model]);
您应该创建一个 twig
组件,它将包围 Twig_Environment
。如果需要,您可以添加 yii\twig\Extension
扩展名。那么你应该这样使用它:
$renderedTemplate = Yii::$app->twig->render($template, $context);
如果您确实需要从字符串变量呈现模板,您可以实现自己的 Twig_LoaderInterface
。有一个 Twig_Loader_String
,但它已被弃用,您不应该使用它。