core icon indicating copy to clipboard operation
core copied to clipboard

[Feature] Content negociation for Custom Action/Controller

Open raziel057 opened this issue 8 years ago • 2 comments

Hi,

It would be great to be able to create Custom Action / Controller not directly linked to any entity but enable the same kind of content negotiation as for the other routes.

For example, if I wants to enable the Content Negotiation request /response listener, I have to add defaults={"_api_resource_class"=Foo::class, "_api_collection_operation_name"=""}):

final class MySpecificAction
{
    private $myService;

    public function __construct(MyService $myService)
    {
        $this->myService = $myService;
    }

    /**
     * @Route(name="api_process_things", path="/task/process/things", 
     * defaults={"_api_resource_class"=Foo::class, "_api_collection_operation_name"=""})
     * @Method({"POST"})
     */
    public function __invoke()
    {
        return $this->myService->pocessThings();
    }
}

Without I need to return a JsonResponse manually if the Accept is application/json (which is not really a problem) but I case the Firewall return an Access Denied (because my role is not allowed to access the route), the response is returned in HTML.

With _api_resource_class and _api_collection_operation_name defined, it works but it's hacked because I need to provide an Entity which doesn't correspond to the process and an empty operation_name. It would be better if we could just provide an option to enable the content negotiation. For example defaults={"_api_resource_negotiation"=true}

What do you think about that?

raziel057 avatar Oct 12 '17 12:10 raziel057

To resolve this we'll introduce providers as attributes that you can use on top of controllers, not sure when it'll be available though.

soyuka avatar Oct 17 '23 09:10 soyuka

Now with our new MainController I think it's definitely possible to use our providers/processors, I'm still looking to provide a way to enable them with attributes on a given controller but haven't found a good DX yet.

soyuka avatar Nov 17 '25 17:11 soyuka