2010-05-11 39 views
24

Tôi có một trang mà tôi muốn chuyển hướng đến điều đó đòi hỏi các thông số trong URL: http://www.example.com/myController/myAction/param1:val1/param2:val2Cake PHP chuyển hướng với các thông số trong url

Tôi biết rằng có một CakePHP chuyển hướng chức năng cho chuyển hướng hoạt động như sau:

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

Làm cách nào để thêm các tham số mà tôi muốn làm một phần của url bằng hàm trên?

Tôi nghĩ rằng có thể có một yếu tố khác mà tôi có thể thêm vào mảng để tôi có thể chuyển theo param1:val1param2:val2.

Bất kỳ trợ giúp nào sẽ được đánh giá rất nhiều!

Trả lời

48

Tôi không biết tại sao tôi không thể tìm thấy điều này trong tài liệu CakePHP, nhưng cuối cùng tôi đã tìm ra giải pháp. Tôi đăng nó ở đây trong trường hợp bất cứ ai khác có cùng một vấn đề. (Nếu ai đó biết nơi này là trong tài liệu xin vui lòng gửi nó là tốt, cảm ơn!)

Để chuyển hướng đến URL:

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

Bạn có thể sử dụng:

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

Hy vọng điều đó sẽ hữu ích!

+0

Làm việc tốt. Nếu không có trong tài liệu, bạn có thể đăng ký và tự thêm nó vào The CookBook để những người khác có thể hưởng lợi. – webbiedave

+2

Khi một phương thức Cake chấp nhận một URL và bạn chuyển vào một mảng thay vào đó, 'Router :: url()' được sử dụng để lấy biểu diễn chuỗi của liên kết (http://api.cakephp.org/class/router#method -Routerurl). Bạn có thể duy trì các tham số có tên của Cake trong các chuyển hướng hoặc liên kết bằng cách kết hợp chúng vào mảng URL mà bạn truyền vào (ví dụ '$ this-> redirect (array_merge (array ('controller' => ...), $ this-> passedArgs)) ') – deizel

3

Thay vào đó, bạn có thể sử dụng định dạng này cũng

<?php 

$this->redirect('/controller/action/par1:par1/par2:par2/'); 


?> 

<?php 

$this->redirect('/controller/action/id/10/name/hello/'); 

?> 
17

Nếu bạn cần phải chuyển hướng với chính xác có được các thông số, sau đó vượt qua '?' chỉ số để $url luận mảng:

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

Nó chuyển hướng đến /myController/muAction/...?param1=val1&param2=val2

Điều này đúng trong ít nhất trong CakePHP 1.3

+0

Làm việc cho CakePHP 2.2.3. –

+0

Làm việc như một sự quyến rũ trên 2.4.6. Cảm ơn bạn. – usumoio

2

Tôi thường làm điều gì đó như sau: $this->redirect(['action' => 'view', $id, 'admins' => true]);

Hy vọng nó sẽ giúp bạn.

Các vấn đề liên quan