Phalcon模板渲染级别和各级别模板调用

Phalcon 有多种渲染级别,他们的嵌套关系,简单来说就是这张图:

2356393933-56a6050b33630_articlex

我们必须在外层视图文件中调用 <?php echo $this->getContent(); ?>的方法,使他们能够嵌套起来。如果是 volt 引擎的话,可以使用 {{ content() }},它经过 volt 编译后和前面的方法是一样的。

我们可以通过$this->view->setRenderLevel(View::LEVEL_MAIN_LAYOUT);的方法选择渲染级别。

类常量 解释 顺 序
LEVEL_NO_RENDER 表明要避免产生任何形式的显示
LEVEL_ACTION_VIEW 生成显示到视图关联的动作 1
LEVEL_BEFORE_TEMPLATE 生成显示到控制器模板布局之前 2
LEVEL_LAYOUT 生成显示到控制器布局 3
LEVEL_AFTER_TEMPLATE 生成显示到控制器模板布局后 4
LEVEL_MAIN_LAYOUT 生成显示到主布局 5

我们可以在 controller 的 initialize() 方法中,使用下面的方法来指定 Level_After_Template 和 Level_Before_Template 对应的文件。

$this->view->setTemplateBefore('before');
$this->view->setTemplateAfter('after');

也可以在某方法中使用 $this->view->disableLevel(View::LEVEL_AFTER_TEMPLATE);禁用对应的模板调用。

以渲染 testController helloAction 为例,它们的目录结构应该是这样

2866290072-56a6084b9147b_articlex

其中,views 根目录下的 index.phtml 是主布局文件。

layouts 文件夹下的三个文件分别对应,Level_After_Template、Level_Before_Template、Level_Layout。

test 文件夹是对应 testController 下每一个 action 的视图,hello 就是 testController 下 helloAction 对应的视图。

Level_Main_Layout 默认是 index.phtml 或 index.volt,后缀取决去你的模板渲染引擎,而且这个文件必须是视图文件夹的根目录下。我们可以可以通过 setMainView('test/index') 的方法指定为 views 根目录下的其他文件。

下面是有关的部分源码。

protected _mainView = "index";

/**
 * Sets default view name. 
 * Must be a file without extension in the views directory
 *
 * <code>
 *     //Renders as main view views-dir/base.phtml
 *     $this->view->setMainView('base');
 * </code>
 */
public function setMainView(string viewPath) -> <View>
{
    let this->_mainView = viewPath;
    return this;
}

/**
 * Returns the name of the main view
 */
public function getMainView() -> string
{
    return this->_mainView;
}
此条目发表在开源代码分类目录,贴了标签。将固定链接加入收藏夹。

发表回复