简体   繁体   中英

Symfony2, no route found and defaults

Simple question but I have issues with it. We have simple route

profile_api_info:
    pattern:  /api/info/{apiID}
    defaults: { _controller: SiteProfileBundle:Api:info, apiID: null}

When we use such url as

http://some.site/api/info/123

we'll get proper result of controller. But when we use this one

http://some.site/api/info/

we'll have an error, why?

No route found for "GET /profile/api/info/" 

We'll have already setuped 'defaults' for our 'apiID' but symfony2 says that no route. Can someone suggest how to deal with it? I want routes

http://some.site/api/info
http://some.site/api/info/

have the same controller as

http://some.site/api/info/123

but with 'apiID' = null or false, no matter.

You have two options.

Option 1: Pass your default parameter.

profile_api_info:
    pattern:  /api/info/{apiID}
    defaults: { _controller: SiteProfileBundle:Api:info, apiID: null}

However you will not be able to have trailing / . This would be correct: http://some.site/api/info This would be incorrect http://some.site/api/info/

Option 2: set up an additional route. ( This would be my preference. )

profile_api_info_woId:
    pattern:  /api/info/
    defaults: { _controller: SiteProfileBundle:Api:info}

In your controller make sure set the default for $apiID to null.

public function infoAction($apiID = null){...}

Using two routes with one controller method should work for all of the following urls:

http://some.site/api/info
http://some.site/api/info/
http://some.site/api/info/123

I've ran into this multiple times and clearing the cache so that Symfony can rebuild the route definitions usually fixes the issue.

Syntax and everything looks correct. However, the route with the trailing slash ( http://some.site/api/info/ ) won't work but http://some.site/api/info should.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM