I'm transitioning a Kohana application to Symfony2. In Kohana I had to register a custom autoloader to make the framework see my controllers given my preferred directory structure. Is there an elegant way in Symfony2 to achieve routing to controllers where the "Controller" directory is a level lower. For example. Src/Somename/aBundle/Theme/Frontend/Controller/defaultController.php
2 Answers
You can place your controllers wherever you want, just import them in your routing.yml:
controller:
resource: @MyBundle/Theme/Frontend/Controller/
type: annotation
Of course, this is only an example. You can find more information and plenty of examples on routing here: http://symfony.com/doc/current/book/routing.html
5 Comments
type in the routing.yml definition. You can use the _controller if you want, but I suggest using annotations as it's more clear and easy to maintain. Also, you can avoid putting the @Route annotation in the controller itself by using the prefix in the routing.yml.Its not possible using the _controller key of a YAML resource file. This is the Symfony2 code that is executed:
//classes.php, parse method
$try = $b->getNamespace() . '\\Controller\\' . $controller . 'Controller';
if (class_exists($try)) {
return $try . '::' . $action . 'Action';
}
As you can see "Controller" is concatenated after the Bundle namespace. Autoloading will use the namespace as a file path and the controller will never be found.
If your using _Controller your controllers must be under the "Controller" folder that is immediately inside your Bundle directory.