Layout 从不同的目录中选择主布局

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/

我有一个多模块的应用程序。每个模块都有自己的视图服务和文件夹。但我需要的是使用不同文件夹中的主布局(通常是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/index.phtml

  • 我尝试使用来自的共享布局,但这不是我需要的。在这种情况下,应用程序不会呈现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的视图,或者您是否可以将其完全删除?