【问题标题】:Cake PHP redirect with parameters in urlCake PHP 使用 url 中的参数重定向
【发布时间】:2011-02-18 09:02:51
【问题描述】:

我有一个需要重定向到 URL 中的参数的页面: http://www.example.com/myController/myAction/param1:val1/param2:val2

我知道有一个用于重定向的 CakePHP 重定向函数,其工作原理如下:

 $this->redirect(array("controller" => "myController",
                       "action" => "myAction",
                       $data_can_be_passed_here),
                 $status, $exit);

如何使用上述函数添加我想要的参数作为 url 的一部分?

我认为可能还有另一个元素可以添加到数组中,这样我就可以传递param1:val1param2:val2

任何帮助将不胜感激!

【问题讨论】:

    标签: php url cakephp redirect parameters


    【解决方案1】:

    我不知道为什么我无法在 CakePHP 文档中找到这个,但我终于找到了解决方案。我把它贴在这里,以防其他人有同样的问题。 (如果有人知道这在文档中的位置,请同时发布,谢谢!)

    重定向到 URL:

    http://www.example.com/myController/myAction/param1:val1/param2:val2

    你可以使用:

    $this->redirect(array("controller" => "myController", 
                          "action" => "myAction",
                          "param1" => "val1",
                          "param2" => "val2",
                          $data_can_be_passed_here),
                    $status,
                    $exit);
    

    希望对你有帮助!

    【讨论】:

    • 干得好。如果文档中没有,您可以自己注册并将其添加到 The CookBook 中,以便其他人受益。
    • 当 Cake 方法接受一个 URL 而你传入一个数组时,Router::url() 用于获取链接的字符串表示形式 (api.cakephp.org/class/router#method-Routerurl)。您可以通过简单地将 Cake 的命名参数合并到您传入的 URL 数组中(例如$this->redirect(array_merge(array('controller' => ...), $this->passedArgs)))来在重定向或链接中保留 Cake 的命名参数
    【解决方案2】:

    如果您需要使用精确获取参数进行重定向,则将'?' 索引传递给$url 数组参数:

    $this->redirect(
        array(
              "controller" => "myController", 
              "action" => "myAction",
              "?" => array(
                  "param1" => "val1",
                  "param2" => "val2"
              ),
              $data_can_be_passed_here
        ),
        $status,
        $exit
    );
    

    它重定向到/myController/muAction/...?param1=val1&param2=val2

    至少在 CakePHP 1.3 中是这样

    【讨论】:

    • 也适用于 CakePHP 2.2.3。
    • 在 2.4.6 上像魅力一样工作。谢谢。
    【解决方案3】:

    您也可以使用这种格式

    <?php
    
    $this->redirect('/controller/action/par1:par1/par2:par2/');
    
    
    ?>
    
    <?php
    
    $this->redirect('/controller/action/id/10/name/hello/');
    
    ?>
    

    【讨论】:

      【解决方案4】:

      我通常会这样做:$this-&gt;redirect(['action' =&gt; 'view', $id, 'admins' =&gt; true]);

      希望对你有帮助。

      【讨论】:

        【解决方案5】:

        CakePHP 4.2 中,"param" =&gt; "val1" 似乎不再起作用了。

        这就是你要走的路:

        return $this->redirect(['controller'=>'mycontroller','action' => 'myview', 'myparameter']);
        

        【讨论】:

          猜你喜欢
          • 2017-01-21
          • 2017-04-29
          • 2021-11-03
          • 2015-06-16
          • 2011-01-09
          • 2015-12-28
          • 2016-01-09
          • 2021-01-02
          • 1970-01-01
          相关资源
          最近更新 更多