2009-12-31 62 views
6

組織控制器的最佳方式是什麼?比方說,我有一個用戶控制器和一個註冊操作,我應該有一個process_registration操作,以及驗證和處理數據的位置,或者只是在註冊操作本身內執行所有操作。我是否需要驗證/處理操作(註冊,process_registration ..等)如何組織控制器以獲得最佳結構(MVC)

我還注意到,很多人都有模塊和控制器僅用於驗證和處理信息,(我想保持所有的驗證邏輯和規則在一個地方也許?)

我想我的問題是,有多大的距離,事情必須分開?這個問題也適用於模型和視圖。

回答

3

通常您的驗證應發生在模型中;這就是MVC範式的一個重點。控制器邏輯是關於在動作之間彈跳用戶,視圖純粹用於演示,業務邏輯位於模型中。通過使模型沒有附加邏輯(驗證或其他方式)的平面對象,某些框架(CodeIgniter)與MVC的意圖發生了很大的分歧,要求您將驗證邏輯移動到控制器層,但在那時您的「模型「根本不是真正的模型,而是榮耀的陣列。

只要有兩個動作「註冊」和「process_register」,我發現它有一個動作更清晰,對發佈和獲取請求的響應方式不同。我把這種行爲「創造」讓一切平安,並有一個路由定義等。無論您的框架定義了它的路線圖「/註冊」到「/用戶/創建」

例僞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

非常感謝,如果你可以進一步解釋你的模型在這個例子中的樣子,這將是巨大的..謝謝 – BDuelz 2009-12-31 19:01:48

1

我的感覺是最好在模型中保持驗證和「處理」。僅使用Controller來管理將請求映射到模型函數。 「Zend Framework:Surviving The Deep End」可能是一個不錯的閱讀。

0

我想根據您的問題,我可以給出的最好建議是,您希望將控制器內的動作分解爲您希望模塊化網站的程度。您還必須記住,如果您從一個操作不斷移動到另一個操作,則處理和搜索引擎優化都會產生成本,因爲操作必須與唯一的URL相關聯。

以下是您希望將註冊與註冊操作分開的一種用例: 您希望能夠通過AJAX在網站的各個位置註冊用戶。通過不同的操作進入註冊頁面並處理註冊數據,您很可能可以在註冊頁面以及註冊燈箱或任何頁面上的快速註冊抽屜中重複使用這些操作。

如果您只打算使用靜態註冊頁面,您不想打擾註冊處理和註冊頁面的麻煩。這樣,您可以檢查並查看您是否正在接收表單數據,並在一個操作中同時執行表單顯示和處理。