2013-03-05 5 views
0

AbstractProcessingHandler에서 파생되는 처리기 클래스를 만들었습니다. 나는 이것을 src/MyNamespace/MyBundle/Monolog/에 넣을 수 있음을 보았지만이 핸들러가 데이터를 기록하는 여러 다른 번들에서 사용되기 때문에 조금 걱정 스럽다. 따라서 다른 번들은이 처리기 때문에 MyBundle이 제대로 작동해야합니다.Symfony2 프로젝트에서 Monolog 커스텀 핸들러를 어디에 배치해야합니까?

내 처리기 클래스를 lib/에 넣으려고했으나 작동하지 않는 것 같습니다 (아마도 Autoload와 함께 특별한 것을해야합니까?).

아니면이 처리기를 위해 특별히 새 번들을 만들어야합니까?

편집 : 사용자 정의 처리기 클래스를 vendor/monolog/monolog/src/Monolog/Handler에 배치 할 수 없습니다. 내 git 리포지토리에 추가 할 수 없기 때문에 :이 폴더는 다른 git 리포지토리 (Composer)

답변

2

:

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

는 작곡가 문서를 살펴 보자 . 핵심은 monolog의 HandlerInterface를 구현하거나 기존 핸들러 중 하나에서 확장한다는 것입니다.

이제 다른 사람이 사용할 수있는 일반적인 물건 인 경우 처리기가 무엇인지에 따라 다르므로 사용자가 monolog에 대한 요청을 제출할 수 있습니다.
그렇지 않은 경우 자신의 작곡가 패키지를 만들거나 src/Acme/Monolog/FooHandler 또는 그와 비슷한 것으로 넣을 수 있으므로 응용 프로그램에 남아 있지만 분명히 묶음에서 제외됩니다. 단점은 번들 중 하나에서 서비스로 구성해야하므로 번들에 대한 의존성이 여전히 존재한다는 것입니다.
어쩌면 자체 번들로 사용하는 것이 의미가 있습니다. 그러나 단 하나의 클래스에 대한 많은 상용구가 있습니다.
모든 번들이 특정 애플리케이션에만 적합하고 추출 할 가능성이 매우 희박한 경우 크로스 번들 종속성이 있어야 IMO를 사용할 수 있습니다.
하나의 번들이 처리기를 포함하고 구성 할 수 있기 때문에 종속성은 그다지 강력하지 않습니다. 다른 번들은 여전히 ​​처리기가 없더라도 기록 할 수 있습니다. 특정 처리기로 이동하지 않습니다. 아무것도 깨지 말아야한다.

알다시피, 그것은 많은 상쇄 관계에 지나지 않으며 프로젝트에 대해 더 알지 못하면 어느 솔루션이 가장 적합하다고 말하기가 어렵습니다.

0

핸들러 클래스를 lib/에 넣으려면 composer.json 자동로드 섹션에 lib/ 폴더를 추가해야합니다. 예를 들면 : 당신이 그것을 호출하는 방법이 넣어 위치에 대한 제한이 정말하거나 독백의 말에

Basic Usage

Autoload

0

나는 여기서 명백한 의존성을 가지고 번들의 "Bridge"디렉토리를 사용하는 것이 일반적이라고 생각한다. 이것에 의존하는 다른 번들을 가지고 있다면 기본적으로 애플리케이션 내의 모든 번들에있는 모든 공유 서비스를위한 ServiceBundle을 작성해야합니다. 이 번들을 배포 할 계획이있는 경우이 방법이 효과가 없을 수 있지만 그렇지 않을 수 있습니다.