5

我正在为我的 PhalconPHP 应用程序使用“多模块”MVC 结构。

我想弄清楚的一个问题是如何将我的“主布局”视图配置为位于模块视图文件夹之上。

换句话说,我想要一个主“主布局”(如此处所述),并且我希望我的所有模块在该主布局视图中的“控制器视图”级别输出它们的视图。

默认情况下,主布局视图似乎取自

[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?)

我希望这是有道理的!

4

3 回答 3

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 上的此示例

这很可能是 0.7 版本的 NFR。

于 2012-10-18T16:21:30.443 回答
1

在 Phalcon 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/');
于 2013-11-21T11:57:22.110 回答
0

你可以使用multiple-shared-layouts Demo或者下载看看它是如何工作的 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;
        };
于 2017-08-10T11:39:07.773 回答