有一个textarea,用户可以编辑一些模板,并可以使用如下变量:
String [] words = {i, to , go , eat,know , i ,let , let , figure , eat};
Map <String,Integer> set=new HashMap();
for (String w:words)
{
if (set.get(w)==null)
{
set.put(w,1)
}
else
set.put(w,set.get(w)+1)
}
应用程序需要用数据替换这些变量并显示HTML输出。
我们可以编写一个小函数来替换模板中的变量和数据,但我们需要使用像Twig或Smarty这样的模板引擎。
https://github.com/yiisoft/yii2-twig https://github.com/yiisoft/yii2-smarty
现在我们可以使用Smarty或Twig的ViewRenderer。
{{model.user.name}}
但是我看到了这个错误:
$render = new ViewRenderer();
$content = $render->render($this->view,'template.twig',[
'model' => $model,
]);
如何使用Smarty或Twig在Yii2中使用数据库中的内容呈现模板?
答案 0 :(得分:1)
我找到了胡子(https://github.com/bobthecow/mustache.php),我正在使用这样:
$m = new \Mustache_Engine();
echo $m->render("Hello {{model.client.firma}}",['model' => $model]);
答案 1 :(得分:0)
您没有手动创建渲染器,您可以配置应用程序组件,如下所示:
[
'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的模板。
然后,您需要做的就是在控制器操作中调用render时添加.twig
扩展名:
public function actionIndex()
{
return $this->render('index.twig');
然后将您的树枝模板放在视图通常位于的视图文件夹中。
阅读树枝扩展程序的文档:Twig Extension for Yii 2
如果您只想使用树枝模板,则可以避免在设置默认扩展名时指定扩展名(.twig):
'components' => [
'view' => [
'defaultExtension' => 'twig',
答案 2 :(得分:0)
您应该创建一个twig
组件,它将包裹Twig_Environment
。如果需要,您可以添加yii\twig\Extension
扩展名。然后你应该像这样使用它:
$renderedTemplate = Yii::$app->twig->render($template, $context);
如果您确实需要从字符串变量渲染模板,则可以实现自己的Twig_LoaderInterface
。有一个Twig_Loader_String
,但它已被弃用,您不应该使用它。