Yii связь между createURL и urlManager
Я новичок в веб-разработке, и я часами пытался понять Yii и то, как он обрабатывает URL-адреса. Я прочитал множество уроков и до сих пор не понимаю этого.
Я пытаюсь установить URL для виджета кнопки, виджета меню, действия контроллера и базовой ссылки HTML. Похоже, что Yii обрабатывает все эти маршруты по-разному, и я не могу заставить его работать.
Вот один пример. Мне нужно получить со страницы в protected/views/site
папка для модуля в protected/modules
, ВСЕ из следующих команд дают мне ошибку CException SiteController cannot find the requested view [...] .../yii/framework/web/CController.php(878)
файл при выдаче следующей команды...
$this->render(Yii::app()->createURL('module/action'));
$this->render(Yii::app()->createURL('/module/action'));
$this->render(Yii::app()->createAbsoluteURL('module/action'));
$this->render(Yii::app()->createAbsoluteURL('/module/action'));
$this->render('module');
$this->render('/module');
$this->render('//module')
$this->render('module/action');
$this->render('/module/action');
Я думал, что получаю эту ошибку, потому что createURL()
дает мне /app/index.php/module/action
, Вместо этого я хочу http://mysite/app/index.php/module/action
, Благодаря @Jonnny, я смог получить полный URL с createAbsoluteURL()
,
Проблема в том, что я все еще получаю ту же ошибку. Если я наберу http://mysite/app/index.php/module/action
, Я получаю модуль, который хочу, но если я пытаюсь отобразить страницу через Yii, я получаю ошибку CException.
Огорчает то, что я могу довольно легко перемещаться между контроллерами в других областях Yii. Например, если я установлю параметры для виджета YiiBooster с чем-то вроде...
array('label' => 'Menu Option',
'url' => array('/controller/action')
... меня направляют в http://mysite/app/index.php/controller/action
не важно с какого контроллера я начал. Шаблон URL для контроллера / действия - это тот же шаблон URL для модуля / действия, так почему же Yii не может отвести меня к модулю / действию?
ОБНОВЛЕНИЕ: Пока я не смогу лучше понять Yii, я использую решение, найденное на http://www.highnd.com/articles/yii-framework/yii-url-links-and-redirection. Теперь я могу получить доступ к модулю с помощью команды: $this->redirect(Yii::app()->createAbsoluteURL('module'));
1 ответ
Render используется для отображения определенного файла просмотра. Вам не нужно добавлять createUrl() перед ним. Просто передайте контроллер / действие, которое вы хотите визуализировать, если вы часто выполняете рендеринг с контроллера, вы можете просто передать имя файла представления. Так
$this->render('view', array('model' => $model)); // here view would be the view file (view.php) that relates to the model instance.
Используемый вами виджет-помощник Yii запрашивает конкретный URL, который вы можете передать как маршрут. Короче говоря, я думаю, что вы используете рендер неправильно. Используется для отображения файла вида с макетом.
createUrl() - создает относительный URL для указанного действия, определенного в этом контроллере.
createAbsoluteUrl () - создает абсолютный URL для указанного действия, определенного в этом контроллере.
Вам нужен createAbsoulteUrl(), если вы хотите полный URL.