Phalcon PHP - 多视图目录


Phalcon PHP - Multiple views directories

我的Phalcon PHP项目有问题。我正在构建包含多个 MVC 目录的单模块应用程序。

每个模块都有自己的"视图"目录,其中包含操作模板。(index.volt, show.volt etc.)。布局从模块/布局/加载,然后使用

$this->view->setLayout('index');

在主控制器初始化()中。

这就是它的样子:

    .    ├── 应用    │ └── 模块    │ ├── 首页    │ │ ├── 控制器底座.php    │ │ ├── 索引控制器.php    │ │ └── 浏览量    │ │ └── 索引.伏特    │ ├── 布局    │ │ ├── 索引.伏特    │ │ └── 管理员    │ ├── 页    │ │ ├── 页.php    │ │ ├── 页面管理员控制器.php    │ │ ├── 页面控制器.php    │ │ ├── admin_views    │ │ │ ├── 编辑伏特    │ │ │ └── 索引.伏特    │ │ └── 浏览量    │ │ └── 显示.伏特    

这是我的查看服务:

$di->set('view', function () use ($mainConfig) {
    $view = new View();
    $view->setLayoutsDir(APPLICATION_PATH . "/modules/layout/");
    $view->registerEngines(array(
        '.volt' => function ($view, $di) use ($mainConfig) {
            $volt = new VoltEngine($view, $di);
            $volt->setOptions(array(
                'compiledPath' => $mainConfig->application->cacheDir,
                'compiledSeparator' => '_'
            ));
            return $volt;
        },
        '.phtml' => 'Phalcon'Mvc'View'Engine'Php'
    ));
    return $view;
}, true);

我想在主控制器(ControllerBase.php)中设置视图目录,因为它取决于当前的控制器名称。

例如:

myapp.com => /modules/index/views/index.volt
myapp.com/page/show/2 => /modules/page/views/show.volt

所以我的问题是:如何设置视图目录和搜索模式以匹配我的结构?

搞定了!

控制器库.php

$moduleName = $this->dispatcher->getControllerName();
$actionName = $this->dispatcher->getActionName();
// set view for current Controller and Action
$this->view->setMainView('layout/index');
$this->view->pick($moduleName."/views/".$actionName);

服务.php

$view->setViewsDir(APPLICATION_PATH . "/modules/");

我只是自己选择当前视图,使用 View::p ick()

不是 100% 的分数答案,因为无论如何你都必须花时间,但你的冷启动应该是这样的:

class ControllerBase extends 'Phalcon'Mvc'Controller 
{
    // initialization for all controllers in module
    protected function initialize() {
        $this->view->setViewsDir(
            sprintf('../application/modules/%s/views/', $this->router->getModuleName())
        );
    }

这应该使您的 phalcon seraching 在模块目录中寻找视图,它的工作结构仍将如下所示:

.
├── application
│   └── modules
│       ├── index
│       │   ├── ControllerBase.php
│       │   ├── IndexController.php
│       │   └── views
│       │       └── Index
│       │           └──default.volt

不确定是否有更"全局"的方式,但我有点觉得应该存在,最有可能是通过异国情调的观点定义DI().