2017-11-07 3 views
2

오버라이드에 크게 의존하는 프로젝트 용 재사용 가능 번들을 만듭니다. 어떤 시점에서 이상하게도 라우팅이 무시되어 작동하지 않습니다.symfony 3 재사용 할 수있는 사용자 정의 번들을위한 라우팅이 무시되었습니다.

Note: AppBundle extends MyBundle

routing.yml

my: 
    resource: '@MyBundle/Controller/' 
    type: annotation 
app: 
    resource: '@AppBundle/Controller/' 
    type: annotation 

SRC/MyBundle/컨트롤러/IndexController.php

<?php 

namespace MyBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 

class IndexController extends Controller 
{ 
    /** 
    * Index 
    * 
    * @Route("/", name="index") 
    * @Method("GET") 
    */ 
    public function indexAction() 
    { 
     return $this->render('index.html.twig'); 
    } 

} 

composer.json

... 
"autoload": { 
    "psr-4": { 
     "AppBundle\\": "src/AppBundle", 
     "MyBundle\\": "src/MyBundle" 
    }, 
    "classmap": [ 
     "app/AppKernel.php", 
     "app/AppCache.php" 
    ] 
}, 
... 

하지만 여전히 NotFoundHttpException - "GET /"에 대한 경로를 찾지 못했습니다.

번들에 대한 특별한 구성이 누락 되었습니까?

업데이트 : 분명히 번들에 부모 역할을하는 것과 관련이 있습니다. getParent() 함수를 제거하면 모든 것이 예상대로 다시 작동하지만 - 번들을 재정의하려면이 함수가 필요합니다.

namespace AppBundle; 

use Symfony\Component\HttpKernel\Bundle\Bundle; 

class AppBundle extends Bundle 
{ 
    public function getParent() 
    { 
     return 'MyBundle'; 
    } 

} 
+0

어떤 Symfony 버전을 사용하고 있습니까? – yceruto

+0

3.3.10이 정확히 –

+0

입니다. 캐시를 지우려고 했습니까? – Chausser

답변

3

시도 '../../src/MyBundle/Controller'와 '../../src/AppBundle/Controller'

그것은 known issue

하지만 "bundle inheritance is now deprecated and will be removed in Symfony 4".

+0

고마워,이 작품은,하지만 난 이것에 대해 좀 더 정보를 기쁘게 생각합니다. 그것은 예상치 못한 일입니다. –

+0

@ ptmr.io, 내 대답은 – Snegirekk

+0

업데이트되었습니다. 글쎄 그건 부끄러운 일이다. 하지만 다른 해결책을 도울 수 있습니다 : 나는 이메일 배열을 반환하는 getRecipiants()와 같은 기능을 가진 MyBundle/Model/ImportNewsletterModel.php를 가지고있다. 이 기능은 앱과 앱마다 다릅니다. 처음에는 필요할 때 파일을 덮어 쓰는 것을 생각했지만 나쁜 습관 인 것 같습니다. 어떻게 구현해야합니까? –