2009-12-09 29 views
5

Tình huống của tôi:Làm thế nào để chuyển hướng CakePHP thành một hành động/bộ điều khiển khác?

Người dùng được trình bày với một bảng hoặc danh sách các mục. Bên cạnh mỗi mục họ có thể nhấp vào một hộp kiểm để chọn nó, và sau đó ở phía dưới là một hộp chọn có nội dung "Với các mục đã chọn ...", và những thứ như "xóa", "di chuyển đến dự án", "tải xuống", v.v. Bạn biết thỏa thuận - hoạt động hàng loạt. Một số thao tác sẽ thực hiện ngay lập tức và không yêu cầu chế độ xem của riêng chúng, tuy nhiên một số thao tác khác sẽ cần một chế độ xem trung gian (ví dụ: "Di chuyển chúng đến dự án nào?").

Vì mỗi thao tác riêng lẻ được xử lý bởi một hành động khác (và bộ điều khiển khác, có thể), nhưng các biểu mẫu chỉ có thể đăng lên một địa chỉ, tôi cần một hành động sẽ lấy dữ liệu đã đăng và gửi đến nơi thích hợp .

Sử dụng redirect() sẽ không hoạt động, vì điều này sẽ cần phải được AJAX'd trong tương lai gần.

Về cơ bản tôi chỉ muốn một hành động mà sẽ uỷ thác cho một bộ điều khiển/hành động khác nhau như thể đó là những yêu cầu ban đầu: duy trì bài dữ liệu, render quan điểm cho rằng, vv

Bất kỳ ý tưởng?

Trả lời

9

Tôi có thể tìm ra bằng cách sử dụng Bộ điều phối.

// for example, to reroute to users/delete 

// this is in the controller which receives the request. 
// this could even be in the AppController 

$this->autoRender = false; 
$d = new Dispatcher(); 
$d->dispatch(
    array("controller" => "users", "action" => "delete"), 
    array("data" => $this->data) 
); 
-1

Nếu bạn làm theo mẫu thiết kế MVC, bạn sẽ không có vấn đề gì với điều đó, vì logic nghiệp vụ phải ở trong Mô hình, không phải là hành động của Bộ điều khiển.

Dù sao, bạn có thể tạo hành động "hàng loạt" sẽ gọi tất cả những người khác đang tìm kiếm một số dữ liệu để làm việc.

+0

yep - làm cách nào để làm điều đó? Làm cách nào để gọi một hành động khác trên một bộ điều khiển khác? – nickf

+0

"gọi", nói rằng, không phải là rất khuyến khích. Nhưng bạn có thể khởi tạo các bộ điều khiển mong muốn bên trong bộ điều khiển đầu tiên. Tuy nhiên, tùy chọn tốt nhất là có Mô hình thực hiện công việc đó và có một số lượng lớn hành động điều khiển(). Mọi thứ sẽ dễ xử lý hơn khi bạn chuyển sang ajax, btw – yoda

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