我已經接觸了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
我的模型,然後我會檢查什麼是設置在控制器中並根據其值調用適當的方法。這似乎是處理這件事的一種可怕的方式,所以如果有人能指出我正確的方向,我會很感激。