2011-02-11 1 views
0

최근에 CI 응용 프로그램에 DataMapper를 구현하기로 결정 했으므로 지금까지 훌륭하게 작동합니다. 나는 사용자 정의 모델 방법의 사용에 관한 두 가지 질문을 가지고있다. 그가 내 애플리케이션에 로그인 할 때 사용자 쿠키를 업데이트하려고한다고 가정 해 봅시다.DataMapper의 사용자 지정 모델 메서드에 관한 질문

 if(isset($_POST['login_rememberme']) && $_POST['login_rememberme'] == TRUE) 
     { 
      // There's already a user object defined here called $user 

      // Create two new random cookies 
      $pid = rand_str(40); 
      $sid = rand_str(40); 

      // Set the cookies in the users browser 
      setcookie('pid', $pid, COOKIE_EXPIRE, '/', FALSE, '', TRUE); 
      setcookie('sid', $sid, COOKIE_EXPIRE, '/', FALSE, '', TRUE); 

      // Update users relationsship with the new cookies in the db 
      ??? 
     } 

쿠키는 사용자 데이터 (비밀번호, 이메일 등)에서 별도의 테이블에 저장됩니다 내 컨트롤러는 다음과 같이 (I 클래스 정의를 exlcuded 한)을 보인다. 쿠키와 사용자 간의 관계는 cookies_users 테이블에 정의됩니다. 나는 내 '쿠키'모델에서 setCookies라는 메서드를 만들고 두 개의 매개 변수를 허용한다고 생각하고 있습니다. 시드pid, 그런데 어떻게 그 메서드에서 이미 설정된 사용자 모델을 사용합니까? 그것은 방법에? DataMapper 읽기 컨트롤러의 모든 로직을 버리고 가능한 한 모델을 깨끗하게 유지하거나 사용자 정의 메서드로 모델을 팩해도 괜찮은지 확신하지는 않습니다. 아무도 이걸 위아래로 뭘 알고 있니?

감사합니다.

답변

1

Codeigniter의 좋은 점은 모델이나 컨트롤러에서 기술적 인면에서 유연하다는 것입니다. 기술적으로 MVC의 목적에 어긋나지 만, 모델을 모방 할 수는 있습니다. "뚱뚱한 모형, 얇은 관제사 대 뚱뚱한 관제사, 얇은 모형"논쟁에 대한 여러 가지 생각들이 있지만, 내 개인적인 선호는 본질적으로 DataMapper를 확장하는 모델에 직접적인 데이터베이스 접근을 모두 갖는 것이다. 내가 찾은 것은 DataMapper를 통해 사용할 수있는 함수를 사용하면 일반적으로 많은 사용자 지정 함수를 추가 할 필요가 없다는 것입니다 (일반적으로 약 6 천 가지로 끝나며 대다수는 그냥 복잡한 다른 컨트롤러에서 재사용 될 수있는 API의 JSON 인코딩에 대한 선택, 유효성 검사 또는 호출).

개체를 통해 모델 함수를 호출하면 $this을 사용하여 설정된 개체에 액세스 할 수 있어야합니다. 거기에서 필요에 따라 사용자 정의 작업을 수행 할 수 있습니다.

따라서, 예를 들어, 당신은 당신의 컨트롤러에 $cookie->setCookie($sid, $pid)가있을 수 있습니다, 그리고 모델의 경우 (코드 테스트뿐만 아니라 예를) 할 수도 있습니다 : 당신이 당신의 모델이 것은 크게 의존

function setCookie($sid, $pid){ 
    $this->pid = $pid; 
    $this->sid = $sid; 
    // Do other custom stuff. 
    return $this->save(); 
} 

귀하가 성취하고자하는 일, 그리고 성취하고자하는 것이 본래대로 DataMapper를 통해 수행 될 수 있는지에 대한 정보를 제공합니다. 기본 CRUD와 관계의 경우 일반적으로 컨트롤러에있는 객체로 끝납니다.

이외에도 세션을 처리하는 여러 인증 라이브러리가 있습니다. 인증 시스템을 구축하려는 경우이를 확인하는 것이 좋습니다.