Маршрут ZF2 на основе метода при расширении AbstractRestfulController

В Zend Framework 2 я пытаюсь направить несколько динамических URL-адресов на указанные действия в контроллере, который расширяет AbstractRestfulControllerна основе типа запроса. Проблема в том, AbstractRestfulController продолжает переопределять эти маршруты к действиям по умолчанию get(), getList(), так далее.

Мои маршруты:

GET /my-endpoint/{other_id} - allAction()
POST /my-endpoint/{other_id} - createAction()
GET /my-endpoint/{other_id}/{id} - getAction()
PUT /my-endpoint/{other_id}/{id} - updateAction()
DELETE /my-endpoint/{other_id}/{id} - deleteAction()

Моя конфигурация роутера:

'my-endpoint' => [
'type' => 'segment',
'options' => [
'route' => 'my-endpoint/:other_id',
'constraints' => [
'other_id' => '[0-9]+',
],
'defaults' => [
'controller' => 'my-endpoint',
],
],
'may_terminate' => true,
'child_routes' => [
'get' => [
'type' => 'method',
'options' => [
'verb' => 'get',
'defaults' => [
'action' => 'all',
],
],
],
'post' => [
'type' => 'method',
'options' => [
'verb' => 'post',
'defaults' => [
'action' => 'create',
],
],
],
'single' => [
'type' => 'segment',
'options' => [
'route' => '[/:id]',
'constraints' => [
'id' => '[0-9]+',
],
],
'may_terminate' => true,
'child_routes' => [
'get' => [
'type' => 'method',
'options' => [
'verb' => 'get',
'defaults' => [
'action' => 'get',
],
],
],
'update' => [
'type' => 'method',
'options' => [
'verb' => 'put',
'defaults' => [
'action' => 'update',
],
],
],
'delete' => [
'type' => 'method',
'options' => [
'verb' => 'delete',
'defaults' => [
'action' => 'delete',
],
],
],
],
],
],
],

И мой контроллер выполняет следующие действия:

public function allAction() {
die('allAction');
}

public function createAction() {
die('createAction');
}

public function getAction() {
die('getAction');
}

public function updateAction() {
die('updateAction');
}

public function deleteAction() {
die('deleteAction');
}

Как я могу конкретно направить этот путь, чтобы другие типы запросов не были разрешены для этого контроллера / переопределение по умолчанию AbstractRestfulController маршруты?

Кроме того, я хотел бы продолжить расширение этого контроллера, потому что я фактически расширяю более общий контроллер, который расширяет этот Zend.

2

Решение

Попробуйте установить: 'may_terminate' => false

Прямо сейчас ваш маршрут будет соответствовать 'my-endpoint' или же 'single' и так как есть никаких действий не установлено для этих матчей. Вместо этого будет получить метод http из запроса и сопоставьте с соответствующими методами контроллера внутри AbstractRestfulController onDispatch метод.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]