0

すべてのモジュール、特にそれらのコントローラーで使用される、Zendフレームワーク2(教義を含む)に共通の変数と関数を配置するための最良/標準的な方法は何ですか?

私はどこかで、コントローラーが別のコントローラー(AppCommonControllerなど)を拡張する必要があることを読みました。このコントローラーは、AbstractActionControllerを拡張します。次に、AppCommonControllerは、それを拡張する任意のコントローラーでアクセスできる共通の変数と関数を定義します。

これを行うためのより良い/標準的な方法はありますか?

- -更新しました - -

たとえば、ほとんどのコントローラー(異なるモジュール間)でサイトの現在のモード(テストまたはライブ)を確認し、それに応じてアクションで必要なことを実行したいとします。

私はいくつかのコントローラーで次のように書いています:

    private $__currentMode = '';

    public function __construct()
    {
        //following will be set to Live or Test depending on a session value
        $this->setCurrentMode('Live');
    }

    public function setCurrentMode($mode)
    {
        $this->__currentMode = $mode;
    }

    public function getCurrentMode()
    {
        return $this->__currentMode;
    }

現在のモードをチェックする必要があるすべてのコントローラーに上記のコードを入れるのは悪い考えだと思います。

そのため、必要に応じてすべてのコントローラーでアクセスできる場所に(currentModeプロパティとgetter / setter関数の両方で)配置したいと思います。

4

2 に答える 2

2

このように、コントローラープラグインがあります

まず、コントローラープラグインを作成します...

namespace Application\Controller\Plugin;

use Zend\Mvc\Controller\Plugin\AbstractPlugin;

class MyModeHelper extends AbstractPlugin
{
    protected $mode;

    public function __construct($mode)
    { 
        $this->mode = $mode;
    }

    public function getMode()
    {
        return $this->mode;
    }
}

getControllerPluginConfig()次に、メソッドを使用してModule.phpでコントローラーマネージャーにそのことを伝えます

// in Application/Module.php
public function getControllerPluginConfig()
{
    return array(
        'factories' => array(
            'myModeHelper' => function($sm) {
                // get mode from environment
                $mode = 'live';
                return new Controller\Plugin\MyModeHelper($mode);
            }
         )
      ); //fixed syntax error
    }
}

これで、プラグインをコントローラーで呼び出すといつでも使用できるようになります。

// in your controllers
public function indexAction()
{
    if ($this->myModeHelper()->getMode() == 'live') {
        // do live stuff
    } else {
        // do test stuff
    }
    return new ViewModel();
} 
于 2013-01-07T11:26:32.320 に答える
1

まあ、機能に大きく依存します。

まず、変数はおそらく構成内に配置するのが最適です。そこから、aServiceLocatorが存在する場所ならどこからでもアクセスできます。

関数に関する限り、それは関数が何をするかに大きく依存します。それらはある種のControllerLogicですか?それならあなたのアプローチMymodule\Stdlib\Controller\Mycontrollerは良い考えかもしれません。

Stdlib-Namespaceの下に汎用コードを持つ現在の「Community-Standards」を見ると、一般的に受け入れられます。

上記以外では、あなたの質問はかなり曖昧なので、私はあなたに何を言うべきかわかりません。

于 2013-01-07T07:31:38.230 に答える