php - 폴더 - 유니티 에셋번들




Symfony2 번들 상속으로 부모 번들 경로가 손실 됨 (3)

here 대로 간단한 번들 상속을 만들려고하고 있으며 경로에 문제가 있습니다. 라우팅에 특수 효과를 사용하고 있습니다. AppKernel.php에 내 자식 번들을 등록하면 모든 부모 번들 경로가 손실됩니다.

Symfony2는 경로를 포함한 모든 파일을 먼저 자식 번들에서 찾은 다음 부모 번들에서 찾아야합니다. 이제는 그런 일이 일어나지 않고 자식 번들 컨트롤러 만로드 된 것 같습니다.

내 자식 묶음 번들 파일에서 지시 한대로 getParent 함수를 구현했으며 routing.yml에 다음과 같은 기능을 제공합니다.

ParentBundle:
resource: "@Parent/Controller/"
type:     annotation
prefix:   /admin/

상속 전에 잘 작동했습니다.

모든 컨트롤러 파일을 routing.yml에 separetely 포함 시키면 시스템이 제대로 작동하는지 테스트했지만 상위 번들 (일부 컨트롤러 만 제외)의 일부만 덮어 쓰려고하므로 상속을 수행하는 것이 매우 번거로운 방법으로 보입니다.

프로파일 러는 내 번들 둘 모두를 활성 상태로 표시합니다.


공식 문서에서는 부모 라우팅 파일을 자식 번들에 복사한다고합니다.

번들의 라우팅을 "오버라이드"하는 가장 쉬운 방법은 전혀 번들로 가져 오지 않는 것입니다. 타사 번들의 라우팅을 가져 오는 대신 해당 라우팅 파일을 응용 프로그램에 복사하고 수정 한 다음 가져 오면됩니다.

또한 심볼릭 이름 "@ParentBundle"을 사용하여 부모의 번들 라우팅 파일을 포함 할 수 없습니다.이 이름은 "@ChildBundle"로 해석되기 때문입니다.

상위 경로 파일을 포함 시키려면 현재 디렉토리에 상대적인 파일 또는 경로의 절대 경로를 사용해야합니다. 예 :

# @YourChildBundle/Resources/routing.yml
YourParentBundle:
  resource: "/srv/www/example.com/src/Your/ParentBundle/Resources/routing.yml"

또는

# @YourChildBundle/Resources/routing.yml
YourParentBundle:
  resource: "../../../../../Your/ParentBundle/Resources/routing.yml"

또 다른 해결 방법은 부모 라우팅 파일을 자식 번들로 심볼릭 링크하고 더 짧은 경로와 함께 포함시키는 것입니다.

cd YourChildBunde
ln -s ../../../../../Your/ParentBundle/Resources/routing.yml parent_routes.yml

그리고

# @YourChildBundle/Resources/routing.yml
YourParentBundle:
  resource: "parent_routing.yml"

추신 : 부모 번들에서 라우팅을 재정의하고 확장하는 방법을 좀 더 좋고 덜 못생긴 방법으로 찾을 수 있기를 바랍니다. 그러나 이제는 이러한 추악한 해결 방법을 찾아야합니다.


번들 상속을 사용하면 상위 번들의 파일을 대체 할 수 있습니다.

번들의 부모와 같은 위치에 라우팅 파일을 생성하는 경우 (상위 파일의 경로가 ParentBundle / Resources / config / routing.yml에 있고 ChildBundle / Resources / config / routing에 경로 지정 파일을 만드는 경우) .yml), 부모의 routing.yml을 오버라이드 할 것이고, 심포니는 자식의 routing.yml만을 사용할 것이다.

나는 시도하지 않았지만 자식 번들의 routing.yml에서 부모 번들의 routing.yml을 가져 오면 문제를 해결할 수 있습니다. Symfony 라우터는 항상 일치하는 첫 번째 경로를 선택하므로 가져 오기 코드 상단에 관련 라우팅 코드를 작성하여 원하는 특정 경로를 무시할 수 있습니다.


이전 답변에 덧붙여서, 나는 자식 번들의 routing.yml의 이름을 (예를 들어 routing_child.yml로) 변경하여 작동하도록해야했다. Symfony가 이름이 동일하면 부모 번들 라우팅 파일을 완전히 무시하기 때문에 이것이라고 가정합니다.

편집 : 많은 경우에 부모 번들 경로를 자식 번들 라우팅 파일로 다음과 같이 가져 오는 것이 또한 실용적이다 :

# routing_child.yml     
_parent:
    resource: "@MyParentBundle/Resources/config/routing.yml"