问题
I can't find any info about the global route prefix in a Symfony 4 application. The only thing I've found is annotating the controllers with @route
. But I don't use annotations and I need all the controllers to have the same prefix.
Now I could do that in S3 like this in the app/config/routing.yml
file:
app:
resource: '@AppBundle/Controller/'
type: annotation
prefix: /foo
But S4 is bundleless and I can't do the same - I would have to create a bundle which I don't need.
Is it possible to define a global route prefix in Symfony 4 at all or I'm going to end up with prefixing every single root/creating a custom route loader, especially if I configure routes in YAML?
回答1:
This works with annotations, giving every controller 'this/prefix' :
# file: config/routes/annotations.yaml
controllers:
resource: ../../src/Controller/
type: annotation
prefix: this/prefix
Then for imported routes 'this/prefix' gets applied to all of FOSUserBundle's routes below (yes I tested it).
# file: config/routes.yaml
fos_user:
resource: "@FOSUserBundle/Resources/config/routing/all.xml"
prefix: this/prefix
If you are not using annotations you should be able to import your separate routing file (which can import many more) applying the prefix to everything in the resource. But drop the "@" notation and use relative path to your file. The value of 'this/prefix' can be configured as a Service Container Parameter, look here: http://symfony.com/doc/current/routing/service_container_parameters.html
回答2:
I'm probably not understanding the question because I don't know why you would want a global prefix in your app. You can set a prefix when importing a route file even if you are using yaml and no bundles.
# config/routes.yaml
blog:
resource: '../src/Resources/config/routes/blog.yaml'
prefix: blog
# src/Resources/config/routes/blog.yaml
blog_show:
path: /show
controller: App\Controller\BlogController::show
blog_list:
path: /list
controller: App\Controller\BlogController::list
bin/console debug:router would yield
blog_show ANY ANY ANY /blog/show
blog_list ANY ANY ANY /blog/list
But again, I suspect you are asking for something else. Perhaps you could add an example to your question?
回答3:
I have the same issue and haven't been able to solve it using yaml configuration but I have it working adding an annotation on the top of the class like this:
/**
*
* Rest\Route("/api")
*/
class TestController extends FosRestController
{
/**
* @Rest\Route("/test", name="tm_test")
* @Method({"GET"})
*/
public function testAction()
{
...
}
}
That will produce a route /api/test
for the testAction()
Look this post: https://symfony.com/blog/new-in-symfony-3-4-prefix-all-controller-route-names
Hope it helps
来源:https://stackoverflow.com/questions/48120939/symfony-4-global-route-prefix