Правила с 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
первый индекс массива содержит имя класса, а второй - имя метода