CakePHP3 CRUD API и API-маршрутизация - PullRequest
0 голосов
/ 30 апреля 2019

Я использую плагин Friends of Cake CRUD для своего внутреннего API.Я также использую префиксы 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();
    }

Когда я звоню следующим образом:

[POST] /api/messages.json

Я получаю ошибку:

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

Вместо этого я использую:

[POST] /messages.json

Я не получаю сообщение об ошибке и могу добавить сообщение.Итак, вопрос в том, почему с моей маршрутизацией префикса API CRUD ищет индекс и как мне избежать этого поведения?

1 Ответ

0 голосов
/ 04 мая 2019

Я нашел проблему:

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

'Api' должен быть в нижнем регистре!

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