【问题标题】:Controlling url in Yii: controller/action/id to /idYii 中的控制 url:controller/action/id 到 /id
【发布时间】:2012-06-06 06:04:38
【问题描述】:

我们可以在 Yii 中以 controller/action/id/id 的格式显示 url 吗?此外,一个主要问题是我只需要在特定的控制器/动作上执行此操作。

例如:如果我有/user/post/ujjwal,那么我只需要显示/ujjwal。而当我拥有/image/display/ujjwal 时,它可以保持原样吗?

我已阅读 Yii 中的 url 管理并了解其中显示的内容。但是我不知道如何根据controller/action控制url。

任何帮助将不胜感激。

谢谢, 乌杰瓦尔

【问题讨论】:

  • 您在其中一个链接上评论说 yii 文档不是您问题的答案。请发布与 url 格式相关的配置文件的摘录。
  • 我的意思是我找不到我的问题可能的接近解决方案.. 或者我可能不太了解它,以至于我无法将它与我的问题联系起来......

标签: url yii


【解决方案1】:

在我看来,您不能将一个自定义 URL 映射到两个或多个 URL 路径或操作。就像当有人访问/my_username 时,将被重定向到/user/post/ujjwal/image/display/ujjwal。应用程序会因为这种模式/规则而感到困惑。

所以我建议您将/image/display/ujjwal 更改为另一个模式/规则。赞/my_username/image

我使用username 作为所选用户名的查询字符串。

'components'=>array(

            .....

            'urlManager'=>array(
            'urlFormat'=>'path',
            'rules'=>array(
                '<username:[\w.]+>'=>'user/post',
                '<username:[\w.]+>/display'=>'image/display',
                '<controller:\w+>/<id:\d+>'=>'<controller>/view',
                '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
                '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
            ),
        ),

            ....

之前有人问过类似的问题:How to specify a SEO friendly url like twitter www.twitter.com/<name> using YII framework

【讨论】:

  • 谢谢。这很有帮助,我按照您的指示进行操作。它有效!
【解决方案2】:

在你的config/main.php试试

'urlManager'=>array(
            'urlFormat'=>'path',
            'showScriptName'=>false,
                        'rules'=>array(
                          'user/post/<user:\w+>'=>'<user>', //this should be the very first rule
                           //other rules 
                         ),
            ),
        ),

【讨论】:

  • 这是相反的——面向客户端的 URI 首先出现在数组中,然后是控制器/动作对。此外,将最通用的规则放在顶部将确保不会达到任何其他规则。
  • 我认为您将“特定”一词与“一般”混淆了。 user/post/&lt;user:\w+&gt; 只会匹配 user 控制器的 post 动作,当它有一个字参数时。
  • 是的,但 OP 不想以这种方式访问​​ /user/post 操作 - 他只希望参数名称出现在 URL 中。
  • 是的,我只想将用户名映射到用户/配置文件/用户名,并且按照 aslingga 的建议,它运行良好。谢谢你们的帮助!!
  • 嗯...为什么这个答案没有被接受,无论如何我只想为特定的网址做@UjjwalPrajapati之类的事情,这种指定规则的方式起到了作用...谢谢跨度>
【解决方案3】:

您可以做您想做的事,但会有一些副作用。如果你把它放在你的config/main.php

        'urlManager'=>array(
        'urlFormat'=>'path',
        'showScriptName'=>false,
        'rules'=>array(
            'image/<action>/<username>' => 'image/action/username',
            '<username>' => 'user/post/username',
            ),
        ),

将所有更具体的规则放在首位,然后将其他所有单个单元发送到/user/post/something

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多