【问题标题】:CakePHP redirect routingCakePHP 重定向路由
【发布时间】:2013-07-31 16:42:59
【问题描述】:

在我的 CakePHP 2.3 应用程序中,我希望 example.com/come/Harry 重定向 example.com/myworks/people/Harry

这可行,但可以连接。

Router::connect ('/come/:myname',
    array('controller' => 'myworks', 'action' => 'people'),
    array(
        'pass' => array('myname')
    )
);

我需要 301 重定向。我试过这个:

Router::redirect ('/come/:myname',
    array('controller' => 'myworks', 'action' => 'people'),
    array(
        'pass' => array('myname')
    )
);

但它重定向到example.com/myworks/people/。如何在重定向时将参数传递给我的操作?

【问题讨论】:

    标签: cakephp url-routing cakephp-2.3


    【解决方案1】:

    对于每个the documentation,您希望使用persist 而不是pass 进行重定向。此代码应该可以按您的意愿工作:

    Router::redirect ('/come/*',
        array('controller' => 'myworks', 'action' => 'people',
              '?' => array('processed' => 1)),
        array(
            'persist' => array('myname')
        )
    );
    

    原因是你在重定向时生成了一个新的url:

    • pass 用于定义哪些路由参数应该是 转移到 pass 数组中。添加要传递的参数将删除它 来自常规路由数组。前任。 'pass' => 数组('slug')
    • 坚持是 用于定义应自动包含哪些路由参数 生成新网址时。您可以通过以下方式覆盖持久参数 在 url 中重新定义它们或通过将参数设置为删除它们 错误的。前任。 'persist' => 数组('lang')

    【讨论】:

    • 是否可以在 URL 中添加静态查询字符串?例如,我想将?processed=1 添加到最终到达网址。
    • @trante 将其添加到我的答案中。
    【解决方案2】:

    你已经差不多了,但你需要定义你的命名参数,以便 cake 知道该 url 是有效的。

    参考,http://book.cakephp.org/2.0/en/development/routing.html#passing-parameters-to-action

    Router::redirect (
        '/come/:myname',
        array('controller' => 'myworks', 'action' => 'people'),
        array(
            'myname' => '[a-z]+',
            'pass' => array('myname'),
            'status' => '301'
        ),
    );
    

    【讨论】:

    • 我为“myname”插入了一个小写单词。但这也重定向到example.com/myworks/people/
    • 当我尝试“Router::connect”时它可以工作,但“Router::redirect”不起作用。
    【解决方案3】:

    使用以下代码

    Router::redirect ('/come/*',
        array('controller' => 'myworks', 'action' => 'people'),
        array('params' => '[a-zA-Z0-9]+')
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-23
      • 2011-04-17
      • 1970-01-01
      • 2012-04-12
      • 2020-04-22
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      相关资源
      最近更新 更多