I recently had an issue where I wanted to have a controller called SocialMediaProfilesController
, but whatever I tried, the automatically generated route names kept coming out as e.g. get_socialmedia_profiles
.
I haven’t dived deep into the code to determine as to why this weird spacing issue is occurring, but my guess would be that if you created a controller called SomeEvenLongerStringController, your action might be get_someevenlonger_string
. But as I say, I haven’t tried this, so it’s just a guess as to what might be happening.
Anyway, the fix is pretty simple. It’s probably out there on Google, or in the docs, or something, but I couldn’t find it. Instead, I stumbled upon this and it works, so here we go:
<?php namespace AppBundle\Controller; use FOS\RestBundle\View\View; use FOS\RestBundle\Controller\Annotations; use FOS\RestBundle\Controller\FOSRestController; use FOS\RestBundle\Routing\ClassResourceInterface; use Nelmio\ApiDocBundle\Annotation\ApiDoc; // some other use statements here, but these are the interesting ones /** * Class SocialMediaProfilesController * @package AppBundle\Controller * @Annotations\RouteResource("socialmediaprofiles") */ class SocialMediaProfilesController extends FOSRestController implements ClassResourceInterface {
By using the RouteResource
annotation, you can control how the route names will be generated.
Without the annotation:
cget_accounts_socialmedia_profiles GET ANY ANY /accounts/{accountId}/social-media-profiles get_accounts_socialmedia_profiles GET ANY ANY /accounts/{accountId}/social-media-profiles/{socialMediaProfileId}
And then with:
cget_accounts_socialmediaprofiles GET ANY ANY /accounts/{accountId}/social-media-profiles get_accounts_socialmediaprofiles GET ANY ANY /accounts/{accountId}/social-media-profiles/{socialMediaProfileId}
So that’s pretty handy.