2

app/config/routing_dev.yml:

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

myPeopleBundle/Resources/config/routing.yml:

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

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

myPeopleBundle:Controller:DefaultController.php:

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

myPeopleBundle:Default:index.html.twig:

Hello {{ name }}!

web/app_dev.php/people ->こんにちはフー!
web/app_dev.php/people/ ->ハローバー!

なぜ違うのですか?people_homepageルートが 2 番目の ( web/app_dev.php/people/) URLと一致しないのはなぜですか?

しかし、 を に設定するprefix/、同じ出力が得られます:
web/app_dev.php ->Hello Foo!
web/app_dev.php/ ->こんにちはフー!

4

1 に答える 1

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 }

この構成では、次のものが得られます。

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

/people/test--->people_homepage

于 2013-03-05T10:46:56.247 に答える