Yii2: Как добавить отдельный модуль API в корневой каталог? - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть базовый проект yii2 с работающей функциональностью веб-приложения, и теперь я хочу добавить API-функциональность для этого приложения. В настоящее время у меня есть структура каталогов как

root
+ api
 + config
 + modules
 + v1
   + controllers
+.htaccess
+index.php
+index.php
+.htaccess
+ web
+ config
+ controllers
...

Теперь я запрашиваю /api/v1/controller/action, но 404 не найдено в качестве ответа. Что-нибудь, что я должен настроить?

1 Ответ

0 голосов
/ 13 сентября 2018

Если вы все правильно настроили и добавили новый псевдоним api в файл common/bootstrap.php, например Yii::setAlias('api', dirname(dirname(__DIR__)) . '/api');, вам нужно определить правила в urlManager, чтобы получить доступ к конкретному действию контроллера внутри вашего api/config/main.php.

Например, у меня есть контроллер внутри api/modules/v1/controller/ с именем Lead и у меня есть два действия с именами actionTest() и actionLists(), и я хочу иметь возможность отправить POST запрос на actionLists() и GET запрос на actionTest(), тогда я определю их в UrlManager, как показано ниже

'urlManager' => [
        'enablePrettyUrl' => true,
        'enableStrictParsing' => true,
        'showScriptName' => false,
        'rules' => [
            [
                'class' => 'yii\rest\UrlRule',
                'pluralize' => false,
                'controller' => 'v1/lead',
                'tokens' => [
                    '{id}' => '<id:\\w+>'
                ],
                'extraPatterns' => [
                    'POST create' => 'create',
                    'GET test' => 'test'
                ]
            ],
        ]
    ]

Теперь я могу отправить POST запрос на http://example.com/api/v1/lead/listи GET запрос к http://example.com/api/v1/lead/test?id=1234

Примечание: обратите внимание на 'pluralize'=>false для правила, если не установлено, вы заметите, что идентификатор контроллера lead отображается во множественном числе как leads в URL-адресах конечной точки.Это связано с тем, что yii\rest\UrlRule автоматически множит идентификаторы контроллера при создании дочерних правил URL.Вы можете отключить это поведение, установив yii\rest\UrlRule::$pluralize в значение false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...