많은 세부 사항을 파악하고 있지만 MVC에 노출되어 있습니다. 내가 배울 몇 가지 작은 개인 프로젝트를 작성했습니다, 비록 내가 아직 어떻게 해야할지 잘 모르겠지만 세 가지 사이의 논리를 적절하게 처리하여 View I가로드되어야 하는지를 결정합니다.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
이 있었는데 컨트롤러에서 설정 한 내용을 확인하고 해당 값을 기반으로 적절한 방법을 호출했습니다. 그것은 이것을 처리하는 끔찍한 방법 인 것처럼 보이므로, 누군가 올바른 방향으로 나를 가리킬 수 있다면 고맙겠습니다.