Yii,createUrl未按预期工作
我在视图中执行以下操作:Yii,createUrl未按预期工作,yii,yii-routing,Yii,Yii Routing,我在视图中执行以下操作: <li><a href='<? Yii::app()->controller->createUrl('sources'); ?>'>sources</a></li> 但是,不会将“sources”附加到路径,相反,代码只会将路径返回到当前控制器 有人能告诉我为什么会这样吗?代码在一个模块中 我的url规则如下: 'rules'=>array( '<controller:\w+&
<li><a href='<? Yii::app()->controller->createUrl('sources'); ?>'>sources</a></li>
但是,不会将“sources”附加到路径,相反,代码只会将路径返回到当前控制器
有人能告诉我为什么会这样吗?代码在一个模块中
我的url规则如下:
'rules'=>array(
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
“规则”=>数组(
“/”=>“/视图”,
'//'=>'/',
'/'=>'/',
),
首先,为什么您要尝试从视图访问控制器?这是毫无意义的,它违背了所有的模式
此外,您还可以使用创建URL。此外,阅读有关如何使用此函数的文档可能会使您受益匪浅
值'sources'
不适合任何路由模式。。尝试以下方法:
Yii::app()->createUrl('sources/view')代码>
Yii::app()->createUrl('sources/foobar')代码>
- 你应该尝试两件事
要获取绝对URL,而不是相对于当前控制器或操作,请添加前导的“斜杠”,如:
Yii::app()->createUrl('/sources/view');
你还应该确保你没有做一些愚蠢的事情,比如忘记使用回声(有时发生在我身上)
<li><a href='<? echo Yii::app()->controller->createUrl('sources'); ?>'>sources</a></li>
您忘记了回声:
<a href="<?php
echo Yii::app()->createUrl("[/][CONTROLLER][/]ACTION", array("view"=>"VIEW"));
?>">Link name</a>
实际上有一个实现,您可以在其中指定操作,在这种情况下,当前控制器id是预先指定的。虽然我同意这样一个事实,即访问控制器没有意义,但当他可以直接使用$this引用当前控制器。@bool.dev时,虽然存在这样一个方法,但这并不意味着您应该从视图访问它。地狱。。嗯,它应该是私有的。若视图开始直接操作控制器实例,那个么我们甚至可以停止假装这是MVC。不是。不存在允许视图实例从控制器请求信息的受MVC启发的设计模式。没有。而且。。。这只是我的问题,或者这是毫无意义的代码复制。我不得不在这个问题上做一些思考(我对MVC的理解仍然很原始)。看起来,URL生成肯定应该与视图相关,因此它将具有路由相关的结构(实际上负责解析URL的结构)作为依赖项。而路由器
也可以保存当前位置。呃。。。。整个混乱源于这样一个事实,即MVC设计模式是为桌面应用程序设计的,而向web环境的转换并不像一些人想象的那么简单。很少有:Model2(几乎没有人使用)、MVP(大多数web框架..成功率有限)、MVVM(asp.net MVC框架,一些javascript框架)和HMVC(php端的Kohana框架,很少有Java框架)。您还需要提供一个控制器和一个动作。控制器本身什么都不是。