1

ZF2 アプリケーションで、PHP Date ユーティリティのラッパーを提供するプラグインを作成しようとしています。このプラグインには、日付の値を初期化、変換、および取得するための API を用意する予定です。

拡張してコントローラーのプラグインを作成する方法を知っています

Zend\Mvc\Controller\Plugin\AbstractPlugin クラス

また、View 用のプラグインを拡張して作成することもよく知っています。

Zend\View\Helper\AbstractHelper クラス。

しかし、コントローラーとビューの両方で使用される単一のプラグインを作成するにはどうすればよいでしょうか?

4

3 に答える 3

6

ServiceManager から取得できるクラス (ファクトリまたは呼び出し可能) を作成し、両方のプラグイン タイプがこのクラスにアクセスできるようにします。これにより、ロジックと機能を 1 つのクラスに保持できます。Zend ナビゲーションは、ヘルパー間で共有されるファクトリ クラス内に格納されているナビゲーションのデータと同様のアプローチをとります。

非常にハックな代替手段は、コントローラー プラグインを作成し、ServiceManager から利用できるコントローラー プラグイン マネージャーを介してコントローラー プラグインを要求することです。もちろん、ServiceManagerAwareInterfaceServiceManager にアクセスするには View プラグインが必要です。

$plugin = $this->getServiceManager()->get('ControllerPluginManager')->get('myplugin');

次に、__invoke()パラメーターをプラグインに渡します。これは実行可能ですが、最初のアプローチの方がはるかに優れています。

于 2012-10-11T11:50:06.693 に答える
1

できません。あなたが正しく述べたように、コントローラープラグインとビューヘルパーは異なるクラスを拡張し、それらを互いに互換性のないものにします。

また、コントローラープラグインとビューヘルパーを混在させることは、どちらも完全に異なる目的を果たすため、実際には意味がありません。コントローラプラグインは、ビジネスロジックの一般的に使用される部分を実行するために使用されますが、ビューヘルパーは再利用可能なビューロジックを提供します。

日付変換(または必要なもの)が可能なクラスを作成し、(このクラスを使用して)目的の形式で日付をレンダリングするアトミックビューヘルパーを作成することをお勧めします。ただし、サービスマネージャーを使用してこのクラスのインスタンスを簡単に取得できるため、必ずしもこのためのコントローラープラグインを作成する必要はありません。

注:私の答えはかなり一般的だと思います-私はあなたが何をしようとしているのかを実際には考慮していません(言い換えれば、Date関数のラッパーを作成することが理にかなっているのかどうかについては考えていませんでした)。私の答えがあなたの問題に合わない場合は、遠慮なく質問をもっと詳しく述べてください。

于 2012-10-11T11:43:17.843 に答える
0

PHP 5.4 を使用している場合は、プラグインとビュー ヘルパーで使用される特性を作成することを検討してください。

于 2012-10-12T01:51:05.187 に答える