Правила с require не работают в YII

Мой admin.php содержит следующий urlmanager, но он не работает.

'urlManager'=>array(
    'showScriptName'=>false,
    'urlFormat'=>'path',
    'rules'=>require(
              dirname(__FILE__).'/../extensions/starship/restfullyii/config/routes.php'
    ),
    'rules'=>array(
        '<controller:\w+>/<id:\d+>'=>'<controller>/view',
        '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
        '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
        ''=>'Site/Login',
        ''=>'Browse/Index',
    ),
),

Он работает на моем локальном компьютере, но не работает на онлайн-сервере, это просто пустая страница. Когда я удаляю

'rules'=>require(
    dirname(__FILE__).'/../extensions/starship/restfullyii/config/routes.php'
),

это работает отлично, но мне нужно это сделать API для моего приложения. У любого есть идея, чтобы решить эту проблему.

1 ответ

Если вы используете версию 1.0, попробуйте это

добавить новый класс в \protected\components\

class URLManager extends CApplicationComponent{
    public $urlRulesPath;

    public function init()
    {        
        Yii::app()->urlManager->rules = include($this->urlRulesPath . 'url_to_rules_array.php');
        Yii::app()->urlManager->init();
    }
}

Затем в config\main.php Индекс компонентов добавить еще один массив (customurlmanager), как показано ниже, где индекс класса содержит URLManager класс присутствует в каталоге компонентов и urlRulesPath это свойство, которое передается тому классу, который содержит ссылку на массив правил.

'components' => array(
        'customurlmanager' => array(
            'class' => 'URLManager',
            'urlRulesPath' => dirname(dirname(dirname(__FILE__))) . '/dynamicurl/'
        ),
        ...

затем preload индекс в config\main.php добавить customurlmanager компонент для загрузки до создания веб-приложения.

'preload' => array('log', 'customurlmanager'),

Тогда проверьте, что это добавит дополнительные правила.

иначе, если вы используете версию 1.1, значит, у urlManager есть метод для добавления правил, который называется addRules так что на основе этого позвольте мне объяснить

добавить этот класс в каталог компонентов

class ModuleUrlManager {

    static function collectRules() {

        $rule = array('test' => 'site\test', ...);


        $urlManager = Yii::app()->getUrlManager();
        $urlManager->addRules($rule);

        return true;
    }

}

Затем в файле main.php добавьте этот массив в первое измерение.

'onBeginRequest' =>array('ModuleUrlManager', 'collectRules'),

в которой onBeginRequest первый индекс массива содержит имя класса, а второй - имя метода

Другие вопросы по тегам