2009-12-31 31 views
6

Làm cách nào tốt nhất để tổ chức bộ điều khiển. Cho phép nói rằng tôi có một bộ điều khiển người dùng và một hành động đăng ký, tôi nên có một hành động process_registration cũng như nơi tôi xác nhận và xử lý dữ liệu, hoặc chỉ làm tất cả việc xử lý trong chính hành động đăng ký. Tôi có nên có một hành động xác thực/xử lý cho mọi hành động yêu cầu nó (đăng ký, process_registration .. vv)Cách tổ chức Bộ điều khiển của bạn để có cấu trúc tốt nhất (MVC)

Tôi cũng nhận thấy rằng rất nhiều người có mô-đun và bộ điều khiển chỉ để xác thực và xử lý thông tin, (tôi đoán là giữ tất cả các quy tắc và quy tắc hợp lệ tại một vị trí có thể?)

Tôi đoán câu hỏi của tôi là cách xa nhau phải làm cách nào? Câu hỏi này dành cho Mô hình và Chế độ xem là Tốt.

Trả lời

3

Thông thường việc xác thực của bạn sẽ xảy ra trong mô hình; đó là điểm của mô hình MVC. Logic điều khiển là về nảy người dùng xung quanh giữa các hành động, quan điểm hoàn toàn là để trình bày, và logic kinh doanh nằm trong các mô hình.

Một số khung công tác (CodeIgniter) phân tán dữ dội từ mục đích của MVC bằng cách tạo mô hình đối tượng phẳng không có logic (xác thực hoặc theo cách khác), yêu cầu bạn di chuyển logic xác thực của mình vào lớp điều khiển, nhưng tại thời điểm đó " mô hình "không thực sự là mô hình ở tất cả, nhưng mảng tôn vinh.

Khi có hai hành động "đăng ký" và "process_register", tôi thấy sẽ sạch hơn khi có một hành động, phản hồi khác với việc đăng và nhận yêu cầu. Tôi muốn gọi hành động này là "tạo ra" để giữ cho mọi thứ yên tĩnh, và có một lộ trình định nghĩa bất cứ nơi nào khuôn khổ của bạn xác định đó là các tuyến đường để lập bản đồ "/ đăng ký" thành "/ user/tạo"

Ví dụ giả php:

<?php 

class User_controller { 
    // [GET|POST] /users/create 
    function create() { 
    $user = new User(); 
    $error = ''; 

    if (postback) { 
     // form has been submitted. 
     $user->name = $_POST['name']; 
     $user->password = $_POST['pasword']; 

     if (validate_user($user)) { 
     $user->save(); 
     redirect("user/show/$user->id"); 
     } 
     // user save failed, fall through to displaying the new user form 
     // the user's name and password (and other fields) are now populated, 
     // and will display 
     $error = 'Account creation failed.'; 
    } 

    // Render the view with the user and the error message (if any) 
    render('views/users/create', $user, $error); 
    } 
} 

?> 
+0

Cảm ơn rất nhiều, Thật tuyệt vời nếu bạn có thể giải thích thêm về cách mô hình của bạn trông như thế nào trong ví dụ này .. cảm ơn – BDuelz

1

Cảm giác của tôi là tốt nhất để tiếp tục xác thực và 'xử lý' trong mô hình. Chỉ sử dụng Bộ điều khiển để quản lý ánh xạ yêu cầu đến một chức năng mô hình.

This section từ "Zend Framework: Surviving The Deep End" có thể là một lựa chọn tốt.

0

Tôi cho rằng lời khuyên tốt nhất tôi có thể đưa ra dựa trên câu hỏi của bạn là bạn sẽ muốn chia nhỏ hành động của mình trong bộ điều khiển ở mức độ bạn muốn mô đun hóa trang web của mình. Bạn cũng sẽ phải nhớ rằng có chi phí trong cả chế biến và SEO nếu bạn liên tục chuyển từ hành động này sang hành động khác, bởi vì hành động phải được liên kết với các URL duy nhất.

Đây là một trường hợp sử dụng mà bạn muốn tách đăng ký khỏi hành động đăng ký: Bạn muốn có thể đăng ký người dùng qua AJAX ở nhiều nơi trên trang web. Với một hành động khác để truy cập trang đăng ký và xử lý dữ liệu đăng ký, rất có thể bạn sẽ có thể sử dụng lại các hành động cho cả trang đăng ký cũng như hộp đèn đăng ký hoặc ngăn đăng ký nhanh trên bất kỳ trang nào.

Trường hợp bạn không muốn bận tâm chia nhỏ quá trình đăng ký và trang đăng ký là nếu bạn chỉ đang có kế hoạch có trang đăng ký tĩnh. Bằng cách đó, bạn có thể kiểm tra xem liệu bạn có đang nhận dữ liệu biểu mẫu và thực hiện cả hiển thị và xử lý biểu mẫu trong một hành động.

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