Делаю версионизированное REST ful API. Структура такая:
Modules:
- api:
--- controllers
---------
BookController
--- models
--- Module.php
--- modules:
--------- controllers
--------------
BookController
--------- models
--------- Module.php
BookController:
class BookController extends ActiveController {
public $modelClass = 'app\modules\api\models\Book';
}
'modules' => [
'api' => [ 'class' => 'app\modules\api\Module', ],
'v1' => [ 'class' => 'app\modules\api\modules\v1\Module', ],
],
'components' => [
'request' => [ 'parsers' => [ 'application/json' => 'yii\web\JsonParser' ],
'baseUrl' => ''
'urlManager' => [
'rules' => [
'' => 'site/index',
['class' => 'yii\rest\UrlRule', 'controller' => 'api/book'],
['class' => 'yii\rest\UrlRule', 'controller' => 'api/v1/book'],
],
При запросе
GET /api/books или
GET /api/v1/books я получаю полный набор данных обо всех книгах.
При попытке усложнить функционал, например создать несколько разных коллекций естественно возникает необходимость добавить в
BookController соответствующие экшены. Но при попытке обратиться, например, к свежесозданному экшену,
GET /api/books/list или
GET /api/v1/books/list я получаю статус 404 и Page not found в теле ответа. А при запросе
GET /api/books?list или
GET /api/v1/books?list (пробовал ради эксперимента) я получаю просто игнор экшена и полный набор информации о книгах. Причем не важно к какому по наименованию и содержанию экшену я обращаюсь.
Когда включил мозг, сообразил, что, видимо, проблема банально в маршрутизации (я надеюсь). Так как я в этом деле - дуб дерево крепкое, подскажите, как правильно прописать правила маршрутизации, чтобы все корректно работало и для базовых контроллеров\экшенов, и для контроллеров\экшенов модулей, и для контроллеров\экшенов вложенных модулей?