2012-07-26 40 views
0

我已經接觸了MVC,但我仍然在搞清楚很多細節。我已經寫了一些小型的個人項目來學習,儘管有一件事我仍然不太確定如何處理三者之間的邏輯,以確定我應該加載的視圖。PHP MVC - 確定加載視圖的方法

舉個例子,設想一個基本的用戶註冊系統。每個用戶都需要有一個用戶名,密碼和其他一些細節來識別它們。我會這樣編碼模型:

namespace Model; 

class NewUser extends Model 
{ 
    public $username; 
    public $password; 
    public $other_details; 

    public function __construct(array $data) 
    { 
     if ($this -> CheckData($data)) 
     { 
      // Add data to some database table. 
      $this -> InsertData($data); 
     } 
    } 

    private function CheckData(array $data) 
    { 
     if (!isset($data['username']) || empty($data['username'])) 
     { 
      return FALSE; 
     } 

     // !isset() and empty() checks on other required information. 

     if (strlen($data['password']) < 8) 
     { 
      return FALSE; 
     } 

     // Make sure data meets other requirements, return FALSE if not. 

     return TRUE; 
    } 
} 

所以這很簡單。 NewUser :: CheckData()確保傳入的數據符合新用戶的要求。所有信息必須非空,密碼至少8個字符等。如果不符合要求,則失敗並且不會添加數據。如果滿足,則新用戶將被添加到系統中。

該控制器處理由客戶端的HTTP請求,請求相應的數據,然後「給出了」客戶端的HTTP響應,所以我會編寫的控制器是這樣的:同樣

namespace Controller; 

class NewUser extends Controller 
{ 
    public $new_user; 

    public function __construct() 
    { 
     if (isset($_POST) && !empty($_POST['username'])) 
     { 
      $this -> new_user = new \Model\NewUser($_POST); 

      // How should I handle what View to load in this case? 
     } 

     else 
     { 
      $this -> DefaultView(); 
     } 
    } 

    private function DefaultView() 
    { 
     $this -> LoadView('header.php'); 
     $this -> LoadView('signup.php'); 
     $this -> LoadView('footer.php'); 
    } 

    private function MissingDataView() 
    { 
     $this -> LoadView('header.php'); 
     $this -> LoadView('missing-data.php'); 
     $this -> LoadView('footer.php'); 
    } 

    private function PasswordTooShortView() 
    { 
     $this -> LoadView('header.php'); 
     $this -> LoadView('password-too-short.php'); 
     $this -> LoadView('footer.php'); 
    } 
} 

,漂亮直截了當。如果未設置$ _POST,則調用DefaultView()。正如評論所指出的,我很困惑我應該如何確定在設置$ _POST的情況下加載哪個View。在過去,我有一個額外的變量$error我的模型,然後我會檢查什麼是設置在控制器中並根據其值調用適當的方法。這似乎是處理這件事的一種可怕的方式,所以如果有人能指出我正確的方向,我會很感激。

回答

0

您通常會看到顯示錶單的註冊操作以及任何錯誤。在提交後,如果所有必需的數據都是有效的,那麼您的控制器會將該用戶插入到數據庫中,並執行所需的任何邏輯,無論是重定向還是確認頁面。