我正在为PhalconPHP应用程序使用“多模块”MVC结构。
我想弄清楚的一个问题是我如何将“主要布局”视图配置为以上模块视图文件夹。
换句话说,我想要一个主“主要布局”(as described here),我希望我的所有模块在该主布局视图中的“控制器视图”级别输出他们的视图。
默认情况下,正在显示主要布局视图
[app]
[module1]
[controllers]
[models]
[views]
(main layout is coming from here)
[module2]
[controllers]
[models]
[views]
(main layout is coming from here)
[views]
(master main layout should come from here?)
我希望这是有道理的!
答案 0 :(得分:2)
你要找的东西不能在这个版本(0.5.0稳定)或下一个0.6.0(因为它被冻结,待发布)中完成。
在您的模块中注册您的观点
// /module1/Module.php
// Registering the view component
$di->set(
'view',
function () {
$view = new \Phalcon\Mvc\View();
$view->setViewsDir('../apps/module1/views/');
return $view;
}
);
// /module2/Module.php
// Registering the view component
$di->set(
'view',
function () {
$view = new \Phalcon\Mvc\View();
$view->setViewsDir('../apps/module2/views/');
return $view;
}
);
等等。
您还可以拥有一个对所有模块都通用的主视图,但不是两者的组合。
//Registering a shared view component
$di->set(
'view',
function() {
$view = new \Phalcon\Mvc\View();
$view->setViewsDir('../apps/views/');
return $view;
}
);
请参阅Github上的this example。
这很可能是0.7版本的NFR。
答案 1 :(得分:1)
在Phalcon ver 1.2.4(也许在早期版本中)也可以使用一个主“主要布局”。 Phalcon相对于ViewsDir建立了lauout的路径,它设置为
$view->setViewsDir('../apps/views/');
因此,如果相对设置lauout的路径,它将起作用
$view->setLayoutsDir('./../../views/');
也许是组织该结构以在应用程序初始化时声明视图对象以及在Module.php中设置ViewsDir的最佳方法:
// Application.php
$di->set('view', function() use ($config) {
$view = new View();
$view->setLayoutsDir('./../../views/');
$view->setLayout('index');
}, true);
和
// /module1/Module.php
$di->get('view')->setViewsDir('../apps/module1/views/');
答案 2 :(得分:0)
您可以使用多个共享布局演示或下载以查看其工作原理 https://github.com/phalcon/mvc/tree/master/multiple-shared-layouts/apps
或者只需为每个Module.php添加t
$di['view'] = function () {
$view = new View();
$view->setViewsDir(__DIR__ . '/views/');
$view->setLayoutsDir('../../common/layouts/');
$view->setTemplateAfter('main');
return $view;
};