我是 Web 开发的新手,我花了几个小时试图了解 Yii 以及它如何处理 URL。我已经阅读了许多教程,但仍然不明白。
我正在尝试为按钮小部件、菜单小部件、控制器操作和基本 HTML 链接设置 URL。似乎 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,我能够使用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'));