2012-07-26 1 views
0

많은 세부 사항을 파악하고 있지만 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이 있었는데 컨트롤러에서 설정 한 내용을 확인하고 해당 값을 기반으로 적절한 방법을 호출했습니다. 그것은 이것을 처리하는 끔찍한 방법 인 것처럼 보이므로, 누군가 올바른 방향으로 나를 가리킬 수 있다면 고맙겠습니다.

답변

0

일반적으로 양식을 표시하는 등록 작업 및 오류에 대해 하나의보기가 있습니다. 제출할 때 컨트롤러는 필요한 모든 데이터가 유효하다면 사용자를 데이터베이스에 삽입하고 필요한 모든 논리 (확인 페이지로 리디렉션 여부)를 수행합니다.

관련 문제