0

我是 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'));

4

1 回答 1

4

渲染用于显示某个视图文件。您不需要在它之前添加 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。

如果你想要一个完整的 URL,你需要 createAbsoulteUrl()。

于 2014-04-22T01:14:23.067 回答