首页 > 解决方案 > CakePHP3 CRUD API 和 API 路由

问题描述

我正在为我的后端 API 使用蛋糕之友 CRUD 插件。我也在为我的路由使用 API 前缀:

Router::prefix('Api', function ($routes) {
    $routes->extensions(['json', 'xml', 'ajax']);
    $routes->resources('Messages');
    $routes->resources('ReportedListings');
    $routes->fallbacks('InflectedRoute');
});

到目前为止,一切都很好。我的控制器如下:

namespace App\Controller\Api;

use App\Controller\AppController;
use Cake\Event\Event;
use Cake\Core\Exception\Exception;

class MessagesController extends AppController {

    use \Crud\Controller\ControllerTrait;

    public function initialize() {  
        parent::initialize();      
        $this->loadComponent(
            'Crud.Crud', [
                'actions' => [
                    'Crud.Add',
                    'update' => ['className' => 'Crud.Edit']
                ],
                'listeners' => ['Crud.Api'],
            ]
            ,'RequestHandler'
        );     
        $this->Crud->config(['listeners.api.exceptionRenderer' => 'App\Error\ExceptionRenderer']);
        $this->Crud->addListener('relatedModels', 'Crud.RelatedModels');
    }

    public function beforeFilter(Event $event){
        parent::beforeFilter($event);      
    }

    public function add() {      
        return $this->Crud->execute();
    }

当我按如下方式拨打电话时:

[发布] /api/messages.json

我收到一个错误:

Action MessagesController::index() could not be found, or is not accessible.

我改为使用:

[发布] /messages.json

我没有收到错误消息,我可以添加一条消息。所以问题是为什么 CRUD 使用我的 api 前缀路由来查找索引,我怎样才能避免这种行为?

标签: crudcakephp-3.x

解决方案


我发现了问题:

Router::prefix('Api', function ($routes) {
     ....
}

'Api' 应该是小写的!

Router::prefix('api', function ($routes) {
     ....
}

推荐阅读