HI Я ищу информацию о лучшем способе перенаправления запросов в пользовательский модуль в инфраструктуре Yii.
Я реализую RestFul Api для проекта и надеялся, что есть какой-то способ, которым я мог бы просто перенаправить все запросы в api / в модуль, где живет остальные api. Даже лучше, если бы кто-нибудь узнал, как маршрутизировать запросы API к пользовательскому классу UrlManager, который расширяет CUrlManager в модуле, который затем обрабатывает маршруты. таким образом, запрос к mydomain / api / user / model будет на самом деле откладываться и обрабатываться компонентом UrlManager в модуле, а другие запросы, т.е. mydoamin.com/client/create, будут просто обрабатываться обычным приложением yii. Насколько я могу сказать, это невозможно !!
Так что я остановлюсь на определении класса менеджера URL в моей конфигурации, который ловит маршруты API, как это
class UrlManager extends CUrlManager
{
protected function processRules()
{
if(!isset($_GET['r']))
{
$this->setUrlFormat('path');
$this->showScriptName=false;
$this->rules=array(
//Api Rest Patterns
array('api/list', 'pattern'=>'^api/user/<model:\w+>', 'verb'=>'GET'),
array('api/view', 'pattern'=>'^api/user/<model:\w+>/<id:\d+>', 'verb'=>'GET'),
array('api/update', 'pattern'=>'^api/user/<model:\w+>/<id:\d+>', 'verb'=>'PUT'),
array('api/delete', 'pattern'=>'^api/user/<model:\w+>/<id:\d+>', 'verb'=>'DELETE'),
array('api/add', 'pattern'=>'^api/user/<model:\w+>', 'verb'=>'POST'),
array('api/test', 'pattern'=>'^api/user/test/<model:\w+>'),
array('api/login', 'pattern'=>'^api/user/<model:\w+>/login'),
array('api/logout', 'pattern'=>'^api/user/<model:\w+>/logout'),
// Other controllers
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
'<action:\w+>'=>'site/<action>',
);
}
return parent::processRules();
}
}
Мой вопрос: как мне направить запрос к контроллеру в модуле? т.е. модуль / RestApi / контроллер / UserApiController.php
array('ModuleController/action' , pattern=>'api/user/<model>' , 'verb'=>'GET)
Я думал об этом
'controllerMap' => array(
'api'=>'application.modules.RestApi.components.ApiManager',
),
Но я почти уверен, что мне нужны две точки доступа, одна для решения административных задач на API и одна для пользователей, поэтому в настоящее время моя структура контроллера выглядит следующим образом:
- RestApiController
- UserApiController (расширяет RestApiController)
- AdminApiController (расширяет RestApiController)
Так есть ли способ динамически направить действия на дочерние контроллеры, которые могут работать? Надеюсь, что я не запутался здесь, действительно надеюсь, что Yii Masters могут помочь с этой проблемой !!
Заранее спасибо