5

PhalconPHP アプリケーションに「マルチ モジュール」MVC 構造を使用しています。

私が理解しようとしている問題の 1 つは、「メイン レイアウト」ビューをモジュール ビュー フォルダーの上に配置する方法です。

つまり、1 つのマスター「メイン レイアウト」(ここで説明) が必要で、すべてのモジュールがそのメイン レイアウト ビュー内の「コントローラー ビュー」レベルでビューを出力するようにします。

デフォルトでは、メイン レイアウト ビューが取得されているように見えます

[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;
    }
);

等々。

すべてのモジュールに共通のマスター ビューを作成することもできますが、2 つのモジュールを組み合わせることはできません。

//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 ver 1.2.4 (おそらく以前のバージョンでも) では、1 つのマスター「メイン レイアウト」が可能です。Phalcon は、ViewsDir に相対的に lauout のパスを構築します。

$view->setViewsDir('../apps/views/');

したがって、ラウトのパスを相対的に設定すると、機能します

$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 に答える