3

関数/メソッドを複数のコントローラーのアプリケーションに対してグローバルにするためのベストプラクティスは何ですか?

たとえば、コントローラーがあるとします。このコントローラーは関数を使用していますが、それを別のコントローラーにコピーして貼り付けるのではなく、その関数を呼び出したいだけです。

class ControllerName extends AbstractActionController {
    // Your actions

    // Has to become a call,
    // instead of copy pasting this function to several controllers
    public function GlobalFunction ($parameter) {
        //Use parameter and return something
    }
}

作成ControllerPluginsは 1 つの解決策StdLibです。では、コントローラーでのみ呼び出される関数のベスト プラクティスは何ですか?

その他の 2 つの関連する質問:

受け入れられた回答に記載されているプラ​​グインが機能します。しかし、どのような場合にプラグインを使用したくなく、別のソリューションを使用するのでしょうか? 十分なドキュメントが見つからなかったので、明るくしたいだけです。

もう一つの興味深い点。このプラグインを複数のモジュールでも使用できるようにする必要がある場合はどうなりますか? アプリケーション内でプラグインをセットアップし、Zend アプリmodule\Application\Config\module.config.php内でセットアップしますか?Config\Autoload\Global.php

4

1 に答える 1

7

Zend\Mvc\Controller\Pluginおそらく、提供されているいくつかの -Classesを見たいと思うでしょう。最終的には、「グローバル関数」が何をすべきかによって異なります。ControllerPlugin として実行するのに適している場合もあれば、サービスの 1 つによって提供される機能として適している場合もあります。

独自の ControllerPlugin を作成するには、次のようにします。

namespace Yournamespace\Controller\Plugin;
 
use Zend\Mvc\Controller\Plugin\AbstractPlugin;
 
class YourPlugin extends AbstractPlugin
{
    public function doSomething()
    {
        // ...
    }
}

getConfig()top-level-array-key を使用して内部で、またはgetControllerPluginConfig()トップレベルのないモジュール内で、構成時にプラグインを登録します。

'controller_plugins' => array(
    'invokables' => array(
        'yourPlugin' => 'Yournamespace\Controller\Plugin\YourPlugin',
    )
),

そして、単にそれを使用してください:

public function indexAction()
{
    $plugin = $this->yourPlugin();
    $plugin->doSomething();

    return new ViewModel();
}

を呼び出すだけの場合は、ControllerPlugin にメソッドを$this->yourPlugin($paramX, $paramY)定義する必要があります。__invoke()

お役に立てれば。

于 2013-05-08T10:36:27.650 に答える