>

현재 CodeIgniter로 코딩을 해왔으며 다른 프로그래머의 코드를 프로그래밍하거나 읽을 때 일반적으로 입력에서 데이터를 얻는 두 가지 방법이 있습니다. 컨트롤러에서 입력을 얻은 다음 다음과 같이 모델에 매개 변수로 전달합니다.

class MyController extends Controller
{
    .
    .
    .
    public function login()
    {
       $username = $this->input->post('username');
       $password = $this->input->post('password');
       $this->load->model('User');
       $this->User->login($username, $password);
    }
}
class User extends Model
{
    .
    .
    .
    public function login($username, password)
    {
      ....
    }
}

다른 하나는 다음과 같이 모델에서 입력 매개 변수에 직접 액세스합니다.

class MyController extends Controller
{
    .
    .
    .
    public function login()
    {
       $this->load->model('User');
       $this->User->login();
    }
}
class User extends Model
{
    .
    .
    .
    public function login()
    {
       $username = $this->input->post('username');
       $password = $this->input->post('password');
    }
}

더 나은 방법은 무엇이라고 생각하십니까? 모델에 더 많은 독립성을 부여하기 때문에 첫 번째로 기울어 지지만 샘플 코드에서 두 번째 방법을 봅니다. 및 다른 개발자에게 제공됩니다. 물론 두 번째 방법은 특히 5-10 개의 입력 필드를 받아 들일 때 더 짧습니다.

  • 답변 # 1

    첫 번째 샘플을 사용하면 다른 개발자가 뷰를 변경하고 컨트롤러를 수정할 수 있지만 모델을 '있는 그대로'유지 관리 할 수 ​​있습니다. 리팩토링이 좋은 예입니다.

    두 번째 샘플을 선택하면 입력 이름이 모델에 의해 잠기므로 가능한 한 적게 모델을 변경하므로 뷰에서 개발을 잠급니다.

    즉, ...
    첫 번째 샘플 : 융통성있는
    두 번째 샘플 : 'd * mnit, 다시는 안됩니다!'

  • 답변 # 2

    논쟁의 여지가 있음을 알고 있지만 이것은 아마도 CodeIgniter MVC정말이 무엇인지에 대한 간단한 설명 일 것입니다.

    모델-액세스 데이터베이스 (CRUD)

    컨트롤러-로직 구현, 라이브러리 및 헬퍼 호출 및보기로 전달

    조회수-사용자가 보는 것

    라이브러리-모델을 사용하는 기능

    도움말-모델을 사용할 필요가없는 기능

    모델 또는 컨트롤러 내에login ()을 추가하고 싶지않습니다.로그인을 처리하기 위해라이브러리를 만듭니다. ()기능으로모델을 직접 호출합니다.

    컨트롤러는 라이브러리를 사용하고$this->input->post변수를 전달한 다음 그에 따라 뷰를 렌더링합니다.

    자세한 정보는 여기에서 찾을 수 있습니다 : CodeIgniter MVC 및 CodeIgniter 라이브러리

  • 답변 # 3

    조금 늦었지만 모델 내에서 깨끗한 모델 (가능한 한) 설정 변수를 유지하고 인수를 전달하기 위해 필요에 따라. 예 :

    class MyController extends Controller
    {
        public function login()
        {
           $this->load->model('User');
           //Set your model's variables, before executing the model function
           $this->User->username = $this->input->post('username');
           $this->User->pass = $this->input->post('pass');
           $this->User->login();
        }
    }
    
    class User extends Model
    {
        var $username;
        var $pass;
        public function login()
        {
            $this->db->where('username', $this->username);
            $this->db->where('pass', $this->pass);
            etc...
        }
    }
    
    

  • 답변 # 4

    첫 번째 프로세스를 선호하고 컨트롤러에서 데이터의 유효성 검사 및 표준화 프로세스를 그대로 둡니다.

  • 답변 # 5

    항상 첫 번째 프로세스를 사용했습니다. 또한 컨트롤러에서 모든 작업을 수행하고 DB 상호 작용을위한 모델을 남겨 둡니다. 그래도 확실한 답은 없다고 생각합니다. 업무에 적합한 것을 사용하십시오.

  • 이전 c# - 고유 한 목록 값 가져 오기
  • 다음 list to treeset 변환은 다음을 생성합니다 "javalangclasscastexception - myclass를 javalangcomparable로 캐스트 할 수 없습니다"