Layout 从不同的目录中选择主布局
我有一个多模块的应用程序。每个模块都有自己的视图服务和文件夹。但我需要的是使用不同文件夹中的主布局(通常是views/index.phtml) 我想呈现:Layout 从不同的目录中选择主布局,layout,view,phalcon,Layout,View,Phalcon,我有一个多模块的应用程序。每个模块都有自己的视图服务和文件夹。但我需要的是使用不同文件夹中的主布局(通常是views/index.phtml) 我想呈现: 呈现一个apps/MODULE-NAME/views/CONTROLLER-NAME/ACTION-NAME.phtml 呈现一个apps/MODULE-NAME/views/layouts/CONTROLLER-NAME.phtml 跳过呈现apps/MODULE-NAME/views/index.phtml 呈现一个apps/views/
我尝试使用来自的共享布局,但这不是我需要的。在这种情况下,应用程序不会呈现MODULE-NAME/views/layouts/CONTROLLER-NAME.phtml中的布局。好的,我不确定这是否是正确的方法,但我认为您可以做的事情与下面类似。虽然请考虑这意味着你必须选择你所有的观点,它不会自动地做< /P> 在Module.php文件中,将视图设置为简单视图
$di['view'] = function() {
$view = new \Phalcon\Mvc\View\Simple();
$view->setViewsDir(realpath(__DIR__.'../../../apps/'));
return $view;
};
然后在bootstrap index.php中禁用自动视图渲染
$application->useImplicitView(false); // add this line
echo $application->handle()->getContent();
最后,在动作方法中,可以执行以下操作来选择视图
public function fooAction(){
echo $this->view->render('common/index');
echo $this->view->render('frontend/Views/layouts/index');
echo $this->view->render('frontend/Views/Index/foo');
}
毫无疑问,你可以构建一个插件或组件来自动处理这个问题,但这应该可以实现你想要的(尽管你可能需要修改更多的应用程序)
事实上,上面的一个基本示例是在baseController中执行以下操作
public function beforeExecuteRoute($dispatcher){
$module = $dispatcher->getModuleName();
$controller = $dispatcher->getControllerName();
$action = $dispatcher->getActionName();
$this->temp = $this->view->render('/'.$module.'/Views/'.$controller.'/'.$action);
}
然后在控制器调用的操作中
echo $this->temp; //temp set above
您可能希望首先检查baseController中是否存在文件,但显然您可以根据$module/$controller等向$this->temp添加不同的视图。您看到最后一个答案了吗?其他页面是否存在级别3的视图,或者您是否可以将其完全删除?