2012-06-20 3 views
0

여기 codeigniter MVC 내 문제가 있습니다.codeigniter mvc, 모델 분리

(사용자, 이메일, 결제) 모델이 3 가지라고 가정합니다. 어떤 방법으로 돈을 지불하면 컨트롤러는 일부 지불 모델을 호출합니다.이 방법은 다른 컨트롤러에서도 호출 할 수 있습니다.

그 방법은 일부 데이터베이스 삽입 및 업데이트를하고 결국에는 사용자에게 전자 메일을 보내려고하는데 이미 사용자 ID가 있지만 사용자 테이블에서 가져온 전자 메일을 필요로하는 사용자 이름이 필요합니다.

결제 모델이 사용자 테이블에 액세스 할 수 있고 사용자 모델로부터 정보를 얻고 전자 메일 모델을 사용하여 전자 메일을 보내고 싶지 않습니다.

일반적으로 컨트롤러에서 전화를 걸면 먼저 전화 지불 모델을 사용하여 결과를 얻고 사용자 모델에서 사용자 정보를 가져온 다음 컨트롤러에서 모두 전자 메일 모델을 사용합니다.

하지만 일부 컨트롤러에서 해당 모델의 메서드를 실행해야하기 때문에 이러한 선을 반복해야하며 내 관점에서 올바른 측면이 아닙니다.

질문 :모델 내에서 다른 모델을 호출하거나 모델 내에서 다른 모델 테이블을 사용해야합니까 (이 옵션에서는 다른 모델이 올바르지 않은 경우이 모델을 변경해야합니다) 다른 어떤 방법으로?

주된 문제는 상황의 예일뿐입니다. 또한 컨트롤러에서 이러한 일을하고 호출하는 일부 함수를 정의했지만 올바르지 않습니다.

+0

를 참조하십시오. 그러나 그것은 옳지 않습니다. – masphp

+0

CI를 3 개월 동안 사용하고 있는데 제한이 있기 때문에 젠드 프레임 워크를 사용하면 유용 할 것입니다.이 경우와 다른 제한 사항이 있습니다 : 다중 계층 컨트롤러 정의 – masphp

답변

1

라이브러리에 모두 넣으십시오.

그래서 컨트롤러가 "지불"을 위해 라이브러리를 호출하고 세부 정보를 전달합니다. , 즉 지불 모델을 호출하는 이메일 등 등 여기

You can learn more about codeigniter libraries here

+0

감사합니다. 옵션입니다. 이 경우 함수와 라이브러리간에 다른 점이 무엇인지, 그리고이 접근법에서 함수를 사용할 수 있다면, 결국 모든 논리를이 경우 모델의 클래스에 넣고 싶었습니다. – masphp

1

훌륭한 솔루션이를 보냅니다 - 당신의 라이브러리는 위에서 설명하는 모든 기능을 수행합니다. application/core에 My_model.php를 정의하십시오.

Class My_model extends CI_Model{ 

    function __construct() 
    { 
     parent::__construct(); 
    } 

    function get($where , $table){ 
     $query = $this->db->get_where($table, $where); 
     return $query->result(); 
    } 
} 

이제 모델은 CI_Model 대신 My_model을 확장해야합니다. 이제 이것을 이렇게 부를 수 있습니다. 컨트롤러에서 전자 메일 모델을로드하고 사용자 모델에 액세스하려고한다고 가정 해 보겠습니다. 모든 방법이 내가 아무 문제가 없었다 동일 모델에 있었다면

$where = array('user_id', $id); 
$table = 'user'; 
$this->email->get($table, $where); 

자세한 내용은이 책을
http://codeigniter.com/forums/viewthread/211821/

+0

이것은 해결책이지만 정확하게 찾고자하는 것은 아닙니다. – masphp