Phalcon View 多个渲染级别之间的关系

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

图片描述

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

那为什么使用 getContent() 方法呢,我们先看一下源码中它的作用是什么

/**
 * Externally sets the view content
 *
 *<code>
 *    $this->view->setContent("<h1>hello</h1>");
 *</code>
 */
public function setContent(string content) -> <View>
{
    let this->_content = content;
    return this;
}

/**
 * Returns cached output from another view stage
 */
public function getContent() -> string
{
    return this->_content;
}

而 $this->_content 是在什么时候被赋值的,我们需要了解 Phalcon 整个 view 层的渲染原理和过程:http://segmentfault.com/a/1190000004358686

我们可以通过$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');

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

图片描述

其中,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() 的方法指定为 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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值