Маршрутизация запросов к модулю - PullRequest
0 голосов
/ 12 июля 2011

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 могут помочь с этой проблемой !!

Заранее спасибо

1 Ответ

1 голос
/ 21 июля 2011

Я, возможно, неправильно понял ваш вопрос (так что поправьте меня, если я это сделал), но вы не можете просто использовать обычный urlmanager с «нормальными» правилами, настроенными так:уверен, что что-то подобное должно работать (хотя и не совсем уверен насчет camelCasing).Маршрут действия модуля - '<moduleid>/<controllerid>/<actionid>', который я знаю точно, потому что использовал его более одного раза.

...