我的Phalcon PHP项目有问题.我正在构建具有多个MVC目录的单个模块应用程序.
每个模块都有自己的“视图”目录,其中包含操作模板. (index.volt,show.volt等).布局从modules / layout /加载,然后设置
$this->view->setLayout('index');
在主控制器initialize()中.
这就是它的样子:
. ├── application │ └── modules │ ├── index │ │ ├── ControllerBase.PHP │ │ ├── IndexController.PHP │ │ └── views │ │ └── index.volt │ ├── layout │ │ ├── index.volt │ │ └── admin.volt │ ├── page │ │ ├── Page.PHP │ │ ├── PageAdminController.PHP │ │ ├── PageController.PHP │ │ ├── admin_views │ │ │ ├── edit.volt │ │ │ └── index.volt │ │ └── views │ │ └── show.volt
这是我的观看服务:
$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
所以我的问题是:如何设置视图目录和搜索模式以匹配我的结构?
解决方法:
搞定了!
ControllerBase.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);
Services.PHP
$view->setViewsDir(APPLICATION_PATH . "/modules/");
我只是自己选择当前视图,使用View :: pick()