YUI createURL和urlManager之间的关系

时间:2014-04-22 00:51:09

标签: php yii yii-booster

我是网络开发的新手,我花了好几个小时试图理解Yii以及它如何处理网址。我已经阅读了很多教程,但仍然不了解它。

我尝试设置按钮小部件的URL,菜单小部件,Controller Action和基本HTML链接的URL。似乎Yii处理所有这些路由的方式不同,我无法让它工作。

这是一个例子。 我需要从protected/views/site文件夹中的某个页面转到protected/modules中的模块。 所有以下命令会给我CException错误{发出以下命令时发出{1}}文件...

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。感谢@Jonnny,我能够获得http://mysite/app/index.php/module/action的完整网址 问题是我仍然得到同样的错误。如果我输入createAbsoluteURL(),我会得到我想要的模块,但如果我尝试通过Yii渲染页面,我会收到CException错误。

令人沮丧的是,我可以在Yii的其他区域轻松地在控制器之间移动。例如,如果我使用类似......

之类的东西将参数设置为YiiBooster小部件
http://mysite/app/index.php/module/action

......无论我开始使用什么控制器,我都会被路由到array('label' => 'Menu Option', 'url' => array('/controller/action') 。控制器/操作的URL模式与模块/操作的URL模式相同,那么为什么Yii不能带我进入模块/操作?

更新 直到我能更好地理解Yii,我正在使用http://www.highnd.com/articles/yii-framework/yii-url-links-and-redirection上找到的解决方案。我现在可以使用以下命令访问模块:     http://mysite/app/index.php/controller/action

1 个答案:

答案 0 :(得分:4)

渲染用于显示某个视图文件。您不需要在它之前添加createUrl()。只需传递要渲染的控制器/操作,如果从控制器渲染,通常只需传递视图文件名即可。所以

$this->render('view', array('model' => $model)); // here view would be the view file (view.php) that relates to the model instance. 

您正在使用的Yii助推器小部件是要求您可以作为路线传递的特定网址。简而言之,我认为你正在使用渲染错误。它用于显示带有布局的视图文件。

  

createUrl() - 为此中定义的指定操作创建相对URL   控制器。

     

createAbsoluteUrl() - 为指定的操作创建绝对URL   在此控制器中定义。

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