0

会社で使用するタスク管理アプリケーションに取り組んでいます。仕様の一部は、ユーザーが必要に応じて、または部門の必要に応じて機能をカスタマイズおよび拡張できるようにするプラグイン システムを作成することです。これを非常にエレガントでモジュール化された方法で実現したいと思っていますが、その方法を理解するのに苦労しています。

タスク リストであるビューを考えてみましょう。生成ループの各反復は、いずれかの端にpre_task()and呼び出しを追加します。これにより、タスク タイトルの両端にインタラクティブな要素 (完了チェックボックス、コメント リンクなど) が構築されます。post_task()システムがプラグイン ファイルを検出してインクルードすると、plugin_time_tracking.phpプラグインは post_task() に機能を追加する必要があります。

私が達成したいのは、プラグインを pre_task() または post_task() に「フック」することです。コアがプラグインを並べ替えてそれらを群れにするのではなく、適切な関数に接続してそれらを拡張することにより、すべてのレッグワークを実行します。適切な場所に機能します。PHP はそのような機能を提供しますか? 私はこれについて間違った方法で進んでいますか?明確にする必要がある場合はお知らせください - 助けてくれてありがとう!

4

2 に答える 2

1

Qafooの少年たちは、PHPBeneluxカンファレンスの2012年版でモジュール性について話しました。彼らは、フック、パッチ適用、継承などのモジュラーアプリケーションを作成するためのさまざまなオプションを提示しました。

そのプレゼンテーションのスライドをここでチェックできます。

于 2013-03-08T10:32:48.117 に答える
0

オーバーライド/継承する機能を備えたプラグイン インフラストラクチャが組み込まれているフレームワークを実際に使用する必要があると思います。例として、Symfony2 としましょう。sf2 では、フォーム オブジェクトを構築する FormType クラスを作成できます (特定のデータをビューに渡します)。したがって、この場合、別のチームがフィールドを追加するには、単に FormType を拡張し、ビルドを変更して新しいフィールドを追加する必要があります。さらに、フォーム Api はサブフォームの埋め込みをサポートしているため、タイム トラックが必要な場合は、それをタスク フォームに埋め込むか、指定した構成機能を使用して「有効にする」だけで済みます。

レンダー シングスと同様に、別のレベルで提供するか、別のバンドル (一種のプラグイン) を参照するだけで、ビュー テンプレートのオーバーライドを定義できます。

現在、Symfony2 は非常に複雑で、学習曲線が高いため、選択する必要があるフレームワークである場合もそうでない場合もありますが、これらの線に沿ったものが適切です。「フック」関数の WP/Drupal パターンは、特にそれらがより深いレイヤーで HTML 文字列を構築していて、適切と思われる出力用の生データを提供しない場合は、非常に面倒です。

于 2013-03-05T15:50:30.860 に答える