Cakephp 3.x:虚线休息api无效

I'm building a RESTful API System with CakePHP 3.1.13 ( i can't use 3.2.x because the Server PHP Version is 5.5.x ).

My controller name is CmsCouplesController.php and the url : http://localhost/~emanuele/works/grai/html/api/v1/cms-couples.json

works correctly.

BUT the other call ( http://localhost/~emanuele/works/grai/html/api/v1/cms-couples/1.json ) return :

Action CmsCouplesController::1() could not be found, or is not accessible.

If i create a controller CouplesController.php all works fine.

So why?!

UPDATE : routes configuration

Router::scope('/', function ($routes) {


    $routes->prefix('v1',function($routes) {
        $routes->extensions(['json','xml']);
        $routes->resources('Couples');
        $routes->fallbacks('DashedRoute');
    });

Resource routes require separate inflection configuration

You are missing the proper inflection configuration for your resource routes. By default resource routes are using underscore inflection, ie currently your resource routes will match cms_couples.

Note that you can easily check which/how routes are connected by using the routes shell

bin/cake routes

It will show you something like

| v1:cmscouples:index  | /v1/cms_couples     | {"controller":"CmsCouples","action":"index","_method":"GET","prefix":"v1","plugin":null}          |
| v1:cmscouples:add    | /v1/cms_couples     | {"controller":"CmsCouples","action":"add","_method":"POST","prefix":"v1","plugin":null}           |
| v1:cmscouples:view   | /v1/cms_couples/:id | {"controller":"CmsCouples","action":"view","_method":"GET","prefix":"v1","plugin":null}           |
| v1:cmscouples:edit   | /v1/cms_couples/:id | {"controller":"CmsCouples","action":"edit","_method":["PUT","PATCH"],"prefix":"v1","plugin":null} |
| v1:cmscouples:delete | /v1/cms_couples/:id | {"controller":"CmsCouples","action":"delete","_method":"DELETE","prefix":"v1","plugin":null}      |

Long story short, use dasherize inflection and you should be good.

$routes->resources('CmsCouples', [
    'inflect' => 'dasherize'
]);

See also

from my understanding...

http://localhost/~emanuele/works/grai/html/api/v1/cms-couples.json

must be pointing to index function of CmsCouplesController.php controller

then for what reason you want this kind of url

 http://localhost/~emanuele/works/grai/html/api/v1/cms-couples/1.json

you can give url like

http://localhost/~emanuele/works/grai/html/api/v1/cms-couples/json-request

then you can put your code in jsonReuest function of the CmsCouplesController.php controller ...

If this does not help then explain your question with answer of my question of why you want URl like 1.json