0

から派生するハンドラ クラスを作成しましたAbstractProcessingHandler。に入れることができることを確認しましたsrc/MyNamespace/MyBundle/Monolog/が、このハンドラーはデータをログに記録する他のいくつかのバンドルで使用されているため、少し心配です。そのため、他のバンドルが適切に機能するには MyBundle が必要になりますが、これはこのハンドラーが原因です。

ハンドラー クラスを入れようとしましたlib/が、うまくいかないようです (Autoload で何か特別なことをしなければならないのでしょうか?)。

または、このハンドラー専用の新しいバンドルを作成する必要がありますか?

編集:カスタムハンドラークラスを実際に配置することはできません。vendor/monolog/monolog/src/Monolog/Handlerこれは、gitリポジトリに追加できないためです。このフォルダーは別のgitリポジトリ(Composerによって作成された)によって管理されているため、競合があります

4

3 に答える 3

2

Monologの側では、それをどこに置くか、またはどのように呼び出すかについて、実際には制限はありません。重要なのは、モノログのHandlerInterfaceを実装するか、既存のハンドラーの1つから拡張することだけです。

これで、ハンドラーが何であるかによって異なります。他の人が使用できる一般的なものであれば、モノログへのプルリクエストとして送信できます。
そうでない場合は、独自のコンポーザーパッケージを作成するか、src/Acme/Monolog/FooHandlerそのようなものに入れることができます。これにより、アプリケーションに残りますが、明らかにバンドルから外れます。欠点は、バンドルの1つでサービスとして構成する必要があるため、バンドルに何らかの依存関係があることです。
たぶんそれをそれ自身のバンドルとして持つことは理にかなっているでしょう。しかし、それはたった1つのクラスにとってかなり多くの定型文です。
すべてのバンドルがアプリケーション固有であり、そこから抽出される可能性が非常に低い場合、IMOを使用しても、バンドル間の依存関係は問題ありません。
1つのバンドルにハンドラーを含めて構成できるため、依存関係はそれほど強くありません。他のバンドルは、ハンドラーが存在しない場合でも、ログに記録できます。その特定のハンドラーには移動しません。何も壊れてはいけません。

ご覧のとおり、これは多くのトレードオフであり、プロジェクトについて詳しく知らなければ、どのソリューションが最も適しているかを判断するのは困難です。

于 2013-03-05T15:07:04.010 に答える
0

ハンドラー クラスを含める場合は、そのフォルダーを autoload セクションlib/に追加する必要があります。例えば:lib/composer.json

"autoload": {
    "psr-0": { "": ["src/", "lib/"] }
}

Composer のドキュメントを参照してください。

基本的な使い方

自動ロード

于 2013-03-05T14:49:12.860 に答える