【问题标题】:Yii app()->createUrl for view actionYii app()->createUrl 用于查看操作
【发布时间】:2014-04-27 19:19:45
【问题描述】:

我在新闻模块中使用 Gii 生成的动作。我有使用 id 参数(例如 example.com/news/view/id/1)的普通视图操作。
当我使用这行代码时:

Yii::app()->createUrl("news/view",array("id"=>$data->primaryKey))

它生成example.com/news/1(如果$data->primaryKey 为1)。这是不正确的。
当我使用这行代码时:

Yii::app()->createUrl("news/view/id/",array("id"=>$data->primaryKey))

它生成example.com/news/id/id/1(如果$data->primaryKey 为1)。

我很困惑!在第一种情况下,此函数不会生成 id 作为参数名称,而在第二种情况下,它会生成!但是在手动添加 id 之后。
我应该怎么做才能使用此功能制作正确的 url 格式?

编辑:新闻是一个模块。我将代码行更改为:

Yii::app()->createUrl("news/default/view/id/",array("id"=>$data->primaryKey))

它生成的example.com/news/default/view/id/1 是正确的,但我不想要那个默认值!

【问题讨论】:

  • 在yii2中使用:<?= Yii::$app->urlManager->createUrl(["post/view","id"=>$post->id]) ?>

标签: php url yii


【解决方案1】:

在配置文件中你有这样的东西:

'urlManager'=>array(
            'urlFormat'=>'path',
            'rules'=>array(
                '<controller:\w+>/<id:\d+>'=>'<controller>/view',
                '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
                '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
            ),
        ),

这将创建如何查看 URL。

创建 URL 时不需要写 id 参数,因为它是默认的。查看urlmanager规则:

Yii::app()->createUrl("news/view/",array("id"=>$data->primaryKey)) => example.com/news/id/1

在模块默认情况下:

Yii::app()->createUrl('/news/default/view', array('id' => $data->primaryKey))

您需要创建 urlmanager 规则...您希望如何查看您的 URL。更多详情here.

【讨论】:

    【解决方案2】:

    使用

    'rules'=>array(
        'news/<controller:\w+>/<id:\d+>'=>'news/<controller>/view',
        'news/<controller:\w+>/<action:\w+>/<id:\d+>'=>'news/<controller>/<action>',
        'news/<controller:\w+>/<action:\w+>'=>'news/<controller>/<action>',
     ),
    

    如果你有一个模块名称news。

    您可以尝试将news 替换为正则表达式,但如果您的正则表达式过于宽泛,您将面临与多个正则表达式匹配的网址的问题。在规则数组键中使用&lt;module:news|accounting|people&gt;,在规则数组值中使用&lt;module&gt;。

    如果您需要更复杂的 url 管理,或者如果您无法使用正则表达式解决您的任务,您可以随时扩展 CUrlManager。

    【讨论】:

      【解决方案3】:

      试图在这个目录上检查它:protected/config/main.php 先生。


      urlManager'=>array(
                  'urlFormat'=>'path',
                  'rules'=>array(
                      '<controller:\w+>/<id:\d+>'=>'<controller>/view',
                      '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
                      '<controller:\w+>/<action:\w+>'=>'<controll<>er>/<action>',
                  ),
              ),
      

      请注意路由是否正确? :)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-30
        • 2013-03-17
        • 1970-01-01
        • 2014-03-27
        • 1970-01-01
        相关资源
        最近更新 更多