1

現在、Zend Framework のモジュラー セットアップには 2 つのモジュールしかありません。

web
mobile

セットアップは次のとおりです。

applications
--modules
----**web**
------controllers
--------IndexController.php
-----------function indexAction(){.......}
-----------function pageAction(){......}
------models
--------Model.php
------views
--------scripts
----------index.phtml
----**mobile**
------controllers
--------IndexController.php
------views
--------scripts
----------index.phtml

モジュール内とモジュール内を再利用することIndexControllerで、mobileモジュール内でコードの再利用を実現し、モジュールでのみ使用できる別のメソッドをモジュールに追加したいと考えています。モジュールのモジュールにコードをコピーせずにこれを行う方法はありますか?indexAction()pageAction()IndexControllerwebpaperAction()**mobile**mobileIndexController.phpwebmobile

ありがとう

4

3 に答える 3

1

ニーズに合った方法に応じて、各モデルのインデックス コントローラーが拡張されるベース コントローラーを作成することができます。基本コントローラーで、2 つの間で共有する最小限の機能を定義します。

または、モジュール コントローラの 1 つをマスタ コントローラにし、そこから他のモジュール コントローラを拡張します。

最初の例では、次のようにします。

アプリケーション/コントローラー/IndexBaseController.php

<?php
class IndexBaseController extends Zend_Controller_Action {
    public function indexAction() {
        // shared code for both modules' indexaction here...
    }

    public function pageAction() {
        // shared code for both modules' pageaction here...
    }
}

次に、これから両方のモジュール コントローラーを拡張します。

アプリケーション/モジュール/ウェブ/コントローラー/IndexController.php

<?php
require_once APPLICATION_PATH . '/controllers/IndexBaseController.php';

class Web_IndexController extends IndexBaseController {
    // other actions here, this already contains indexAction and pageAction()
}

次に、 で同じことを行いmobile/controllers/IndexController.phpます。

もう 1 つのオプションは、コントローラー (Web またはモバイル) の 1 つを、もう 1 つのコントローラーを拡張するコントローラーにすることです。その方法の例については、別のモジュールで使用するために zend モジュール コントローラーを共有するこの回答を参照してください。似ていますが、正しいコントローラ ファイルを必要とするだけで、そこから拡張できます。

于 2012-05-02T00:32:15.460 に答える
0

ええ、コントローラーをインスタンス化して、いつでもメソッドを呼び出すことができます

$web_ctlr=new Web_IndexController();
$web_ctlr->indexAction();
$web_ctlr->pageAction();

ただし、アクションはレンダリングを準備するためのものであるため、問題はアクション内で何をしているのかということです。したがって、特にコントローラーコンストラクターでhtmlレンダリングを実行している場合は、複数の出力が得られると思います。再利用可能なアクションから有効なデータを返す場合は、今のところ問題ないはずです。ただし、zendの部分的な概念を見て、どちらが状況に適しているかを判断することをお勧めします

于 2012-05-01T23:33:31.217 に答える