2013-03-05 2 views
2

응용 프로그램/설정/routing_dev.yml :symfony2 기본 틀로 라우팅

people: 
    resource: "@myPeopleBundle/Resources/config/routing.yml" 
    prefix: /people 

myPeopleBundle/자원/설정/routing.yml :

people_homepage: 
    pattern: /{name} 
    defaults: { _controller: myPeopleBundle:Default:index, name: Foo } 

people_homepage2: 
    pattern:/
    defaults: { _controller: myPeopleBundle:Default:index, name: Bar } 

myPeopleBundle : 컨트롤러 : DefaultController.php :

... 
public function indexAction($name) { 
    return $this->render('myPeopleBundle:Default:index.html.twig', array('name' => $name)); 
} 
... 

myPeopleBundle : 기본값 : index.html.twig :

Hello {{ name }}! 

web/app_dev.php/people -> 안녕하세요 푸!
web/app_dev.php/people/ -> 안녕하세요!

왜 다른가요? people_homepage 경로가 두 번째 (web/app_dev.php/people/) URL과 일치하지 않는 이유는 무엇입니까?

하지만 /prefix를 설정하면 나도 같은 출력을 얻을 :
web/app_dev.php -> 안녕하세요 푸!
web/app_dev.php/ -> Hello Foo!

답변

3

당신이 appdevUrlMatcher.php를 보면 당신은 다음과 같이 표시됩니다

// people_homepage 
    if (preg_match('#^/people(?:/(?P<name>[^/]++))?$#s', $pathinfo, $matches)) { 
     return $this->mergeDefaults(array_replace($matches, array('_route' => 'people_homepage')), array ( '_controller' => 'Acme\\DemoBundle\\Controller\\DefaultController::indexAction', 'name' => 'Foo',)); 
    } 

    // people_homepage2 
    if (rtrim($pathinfo, '/') === '/people') { 
     if (substr($pathinfo, -1) !== '/') { 
      return $this->redirect($pathinfo.'/', 'people_homepage2'); 
     } 

     return array ( '_controller' => 'Acme\\DemoBundle\\Controller\\DefaultController::indexAction', 'name' => 'Bar', '_route' => 'people_homepage2',); 
    } 

당신은 경로 /people/people_homepage와 일치가 없다 할 수없는 것을 볼 수 있지만,이 /people 또는 /people/test

함께합니다 당신이 노선의 순서를 바꿀 때 당신이하는 일이 더 합리적 일 것입니다.

people_homepage2: 
    pattern:/
    defaults: { _controller: myPeopleBundle:Default:index, name: Bar } 

people_homepage: 
    pattern: /{name} 
    defaults: { _controller: myPeopleBundle:Default:index, name: Foo } 
이 구성으로 6,

이있을 것이다 :

/people == /people/ --->people_homepage2

/people/test --->people_homepage