2
votes

I am trying to setup a RESTFUL web service using FOSRestBunble, but I have some problem making POST calls, here's my setup:

app/config/routing.yml

rest:
    type: rest
    resource: "routing_rest.yml"
    prefix: /api

app/config/routing_rest.yml

Rest_User:
    type: rest
    resource: "@AppBundle/Resources/config/routing_rest.yml"

AppBundle/Resources/config/routing_rest.yml

rest_application:
    type: rest
    resource:     "AppBundle:Rest"
    name_prefix:  api_

AppBundle/Controller/RestController.php

class RestController extends FOSRestController
{

    public function testrestAction(Request $request)
    {
        $r = [
            'is'    => 'TEST'
        ];
        return $r;
    }

    public function getArticleAction()
    {
        $r = [
            'is'    => 'GET'
        ];
        return $r;
    }

    public function postArticleAction()
    {
        $r = [
            'is'    => 'POST'
        ];
        return $r;
    }
}

I also made PUT and DELETE test methods. so when I do some test call

GET /api/testrest

{
    "is": "TEST"
}

GET /api/article

{
    "is": "GET"
}

POST /api/article

No route found for "POST /api/article": Method Not Allowed (Allow: GET, HEAD) (405 Method Not Allowed)

PUT and DELETE are also fine. Am I missing some configuration?

second problem: if I make a API folder inside Controller folder, I change the namespace for RestController to "namespace AppBundle\Controller\API;" and I update "AppBundle/Resources/config/routing_rest.yml" to

resource:     "AppBundle:API:Rest"

then I got this message:

Can't locate "AppBundle:API:Rest" controller in /var/www/ws/app/config/routing_rest.yml (which is being imported from "/var/www/ws/app/config/routing.yml").

any help appreciated

1

1 Answers

0
votes

1-option, run app/console debug:router (or bin/console debug:router if v > 2.8), to list generated routes;

2-option, add RouteResource annotation to class (eg. article), rename postArticleAction to postAction and check POST /api/articles is responding or not;

3-option, add article url explicitly with @POST annotation, eg. /** @Post("article") */