- Consider building a result or response class to:
- provide more better structure around the returned result,
- provide possible re-use in other controllers,
- and clean up this code.
You could have this class implement JsonSerializable interface so you can pass it directly to JsonResponse() for serialization. This also allows you to do thingthings like adadd validation that setters are passed valid values (i.e. boolean for setSuccess())
Look for opportunities to remove code paths and complex nesting by getting rid of unnecessary else blocks (many of which truly are unnecessary) and exiting early by inverting conditions. This The fewer code paths you have in your code, the less fragile, easier to test, and easier to maintain it will be.
- I think if you clean those things up, you will probably save 40% of the lines of code in this method. So it might not look like there is "too much" happening in this single method. That being said, I think you could possibly fork the execution path along the lines of
$actionvalue , and hand ofoff to protected/private class methodmethods to finish that particular work.
switch($action) {
case 'remove':
return $this->removeFavorite(...);
break;
case 'add':
return $this->addFavorite(...);
break;
default:
$result['success'] = false;
return JsonResponse($result);
}
- With regards to your documentation, I find many of your comments to be unnecessary. I think you generally have meaningfully named named variables and appropriate use of vertical whitespace between logical sections of code to where comments become superfluous. Especially, if you consider breaking this main method into several other well-named methods, you should not have much need to comment this code.