1

I'm creating a Symfony CMS by myself. I want to map paths like /login and /{slug} at the same time, but I don't know if it is possible.

I tried simply setting both of the paths in 2 different controllers, but that didn't seem to work.

/**
*@Route('/login', name='login')
*/
public function login(){}

/**
*@Route('/{slug}', name='dynamic-site')
*/
public function dynamicSite(){}

With the setup above, the second path is reached every single time. There is no way to visit login. I expected Symfony to first try finding hard-coded routes, but it seems like it doesn't work like that.

Pathik Vejani
  • 4,263
  • 8
  • 57
  • 98
Dawid Cyron
  • 162
  • 1
  • 1
  • 11

1 Answers1

1

The routing tries to match routes one by one in the order of their definitions. So, you have to order your controllers. Probably you have

controllers:
    resource: '../src/Controller/'
    type: annotation

You should add the "/login" before the "controllers" import

login:
    controller: App\Controller\Login
    type: annotation

The result should be

# config/routes.yaml
login:
    controller: App\Controller\Login
    type: annotation
Slug:
    controller: App\Controller\Slug
    type: annotation

Don't forget to change controller names according to your application!

You may re-read the docs - https://symfony.com/doc/current/routing.html

I, personally, prefer to use yaml, because the order is very explicit.

You should test if it is possible to have both imports

login:
    controller: App\Controller\Login
    type: annotation
controllers:
    resource: '../src/Controller/'
    type: annotation

You may get an error. If the error appear, then you will have to list all your controllers 1 by 1.

po_taka
  • 1,816
  • 17
  • 27