supra7sky
@supra7sky

Как изменить поведение BjyAuthorize для работы с REST API (HTTP методами, RestfulController)?

Нужно заставить его вместо экшенов AbstractActionController'a работать с экшенами RestfulController'a (get, getList) или с HTTP методами приходящими в Request (GET, POST, PUT).

При этом желательно сохранить возможность контроля и обычных экшенов, по скольку их можно создавать в RestfulController'e. Наверное было бы удобнее получать имена методов RestfulController'a (get, getList), а не HTTP Request'a, что бы не загаживать конфиг доп. параметром http_method/controller_method.

Как мне получить имя вызываемого экшена RestfulController'a (get, getList и т.п.)?
Какие сервисы и провайдеры нужно подменить?
  • Вопрос задан
  • 2342 просмотра
Пригласить эксперта
Ответы на вопрос 1
config/module.config.php
return [
    'router' => [
        'routers' => [
            'api-login' => [ // REST
                'type' => 'Literal',
                'options' => [
                    'route' => '/api/login',
                    'defaults' => [
                        'controller' => 'YourModule\Controller\Login'
                    ],
                ],
            ],
            'login' => [
                'type' => 'Literal',
                'options' => [
                    'route' => '/login',
                    'defaults' => [
                        'controller' => 'YourModule\Controller\Login'
                        'action' => 'login',
                    ],
                ],
            ],
        ],
    ],
    'view_manager' => [
        'strategies' => [
            'ViewJsonStrategy',
        ],
    ],
    'controllers' => [
        'invokables' => [
            'YourModule\Controller\Login' => 'YourModule\Controller\LoginController',
        ],
    ],
];

src/YourModule/Controller/LoginController.php
class LoginController extends AbstractRestfulController {
    public function create($data) {
        // POST данные пришедшие по REST
        return new JsonModel(['status' => 'error', 'message' => 'Логин и/или пароль указан не верно.']);
    }

    public function getList() {
        // GET данные без id
        return new JsonModel(['item1', 'item2', 'item3']);
    }

    public function loginAction() {
        // обычный Action
        return new ViewModel();
    }
}


следует обратить внимание на то, что:
  • Контроллер унаследован от AbstractRestfulController
  • В конфиге указана стратегия ViewJsonStrategy
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы