【问题标题】:Yii: how to add general parameter to the URLYii:如何在 URL 中添加通用参数
【发布时间】:2014-07-30 21:13:56
【问题描述】:

我想在 URL 中添加一些通用参数。例如:

http://example.com/user/join?ref=bazuka_007

http://example.com/comments/123?simpleAuthToken=29c1urnfu9fh42183c43h1hc43814h0c

如果我想跟踪用户从哪里访问我的网站或自动验证他们的身份。

如何组织两件事:

  • 混合美化 URL 和参数。
  • 处理代码中的通用参数。

【问题讨论】:

    标签: php yii url-rewriting url-routing


    【解决方案1】:

    对于您的第一个示例,您可以按如下方式指定路由器规则:

    'rules'=>array(
        ...
        array('user/index/username/<username>', 'pattern'=>'user/<username:\w+>*'),
        ...
    )
    

    http://example.com/user/join?ref=bazuka_007

    将变为: http://example.com/user/join/ref/bazuka_007

    得到的参数将是

    $_GET[username] = 'join';
    $_GET[ref] = 'bazuka_007';
    

    第二个例子可以类推。

    UPD:

    您还可以指定更常见的规则:

    'rules'=>array(
        ...
        array('<controller>/index/param/<param>', 'pattern'=>'<controller:\w+>/<param:\.+>*'),
        ...
    )
    

    UPD2:

    我想如果您想为所有请求执行通用逻辑,那么您应该在基本控制器中实现逻辑并从中扩展您的所有控制器。

    您还可以在每个控制器中实现beforeAction() 方法,该方法将在控制器中的每个操作之前被调用。

    【讨论】:

    • ...这意味着我必须修改我在现场的每条路线以处理相同的情况。它看起来不像一个合适的设计。
    • @DenisKulagin 我刚刚在帖子中添加了答案。
    • 但是,我如何以及在哪里处理常见逻辑?例如。我想为我指定 ref 的每个页面将 entry-page/ref 保存到数据库中。
    • beforeAction 很棒,但是如何在这个通用逻辑处理程序中获取自定义参数(例如 ref、simpleAuthToken)?
    • @DenisKulagin 像通常的获取参数 ($_GET['simpleAuthToken']) 或 Yii::app()-&gt;request-&gt;getParam('simpleAuthToken')。每对 url 在斜杠之间的路径将被添加以获取参数作为 key=>value。例如:此请求中的http://example.com/user/join/ref/bazuka_007/var_2/val_2/var_3/val_3 将在获取参数后创建:'ref'=&gt;'bazuka_007', 'var_2'=&gt;'val_2', 'var_3'=&gt;'val_3'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多