如何在Phalcon中使用Twig实现继承?

时间:2013-01-15 20:54:24

标签: twig phalcon

确定。我使用Twig作为View引擎,Phalcon版本是0.8

我从此存储库获取的适配器代码:github我在此代码中进行了一些小修改,因为我通过composer包含了Twig。我不会描述这些修改,因为它们并不重要。

因此。我的视图目录结构非常简单:

app
- views
--- index.twig
--- about
---- index.twig

观点来源/ index.twig:

<html>
<head>
    <title>Phalcon PHP Framework</title>
</head>
<body>
    {% block content 'This is main page' %}
</body>
</html>

观点来源/ about / index.twig:

{% extends "index.twig" %}

{% block content %}
    This is About page
{% endblock %}

另外,我有单一方法控制器About(AboutController.php)

public function indexAction()

它是空的。

确定。现在。当我做一个页面/约的请求时,我希望看到类似的东西:

This is About page

但我仍然看到views / index.twig的内容:

This is main page

这对我来说有点奇怪。我重新分配块“内容”!

我在模板视图/ about / index.twig中做了一些检查,在块中添加了额外的字符,我收到了来自Twig的错误:

A template that extends another one cannot have a body in "about/index.twig"

因此。有什么想法吗?

P.S。我想我应该调用tpl views / index.twig方法{{content()}}但是Twig对这个方法一无所知。

2 个答案:

答案 0 :(得分:0)

问题是我不够好阅读文档!

要解决我的问题,我必须在View组件中使用渲染级别的模板:official docs

要在Twig中使用内置导出功能并使用强大的继承机制, 我们必须设置级别渲染:

$view->setRenderLevel(Phalcon\Mvc\View::LEVEL_ACTION_VIEW); 

在这种情况下,引擎将立即处理模板操作的内容。

答案 1 :(得分:0)

使用{{content | raw}}

Index.twig:

<h1>Title</h1>
{{ content|raw }}

行动观点:

<h2>Title 2</h2>