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框架)。您还需要提供一个控制器和一个动作。控制器本身什么都不是。