2017-02-08 6 views
-1

왜 부모를 사용해야합니까 :: __ construct(); 생성자, 내가 필요로하는 것은 무엇입니까?Codeigniter, 왜 CI_Controller의 구조가 필요합니까? (아래 코드)

// CONTROLLER

class users_ctrl extends CI_Controller { 

    function __construct() { 
     parent::__construct(); //Why do I need to include it? 
     $this->load->model('select_model'); 
} 
    public function index() 
    { 
     $data['user_list'] = $this->select_model->get_all_users(); 
     $this->load->view('show_users', $data); 
    } 
} 

// MODEL하여 주어진 예에서

class select_model extends CI_Model{ 
    function __construct() { 
     parent::__construct(); 
} 

    function get_all_users() 
    { 
     $query = $this->db->get('students'); 
     return $query->result(); 
    } 
} 
+2

가능한 복제 [컨트롤러 클래스는 부모 컨트롤러를 확장 할 때 왜 우리는 여전히 부모 생성자가 필요합니까?] (http://stackoverflow.com/questions/15063890/why-do-we-still-need-parent-constructor- 에서 [CI_Controller 부모] 호출) – skrilled

+0

https://www.codeigniter.com/user_guide/general/controllers.html#class-constructors – user4419336

+0

제어기 - 클래스 --A-C-부모를 확장 할 때 (HTTPS : // GitHub의. com/mattbryson/Codeigniter_Code_Complete/blob/master/system/core/CI_Controller.php # L93) 부트 스트랩 파일 (CodeIgniter.php)에 의해 인스턴스화 된 모든 클래스 객체를 로컬 클래스 변수에 할당하여 CI를 하나의 큰 슈퍼 만약 당신이 자신의 생성자를 가지고 있고 부모 생성자를 호출하지 않는다면, 이것은 일어나지 않을 것이고, 일들은 깨질 것 같다. ('$ this-> load'가 설정되어 있지 않음을 발견하는 것 , 그래서'$ this-> load-> model ('select_mode 난 ');'작동하지 않습니다) –

답변

0

, 당신은 load 클래스가 기본 컨트롤러 클래스로드를 요구하고있다. 부모 생성자가 없으면 직접 인스턴스를로드해야합니다.

모델에 따라 db 개체를 수동으로로드해야합니다.

것은 그것을 제거하고 옆 called to undefined propery $class::load

0

CodeIgniter는 같은 것을 받아야합니다, 정말 객체 지향 프로그래밍에 대한 기본적인 기초이다.

다른 클래스를 확장하는 클래스를 만들고 하위 클래스에서 새 생성자를 선언하면 부모 생성자가 실행되지 않습니다.이 클래스를 재정의 했으므로 CodeIgniter 기본 컨트롤러는 (대부분) 많은 작업을 수행하기 때문에 배후에있는 것들 중에서 부모 생성자를 실행하지 않으면 컨트롤러가 CI 컨테이너에 주입되지 않을 가능성이 높습니다. 의

+0

나는 아이 생성자가 부모를 무시하지만, 내가하지 않는 것은 CodeIgniter가 장면의 배후에서 어떤 일을하는지, 그렇지 않으면 쿼리 나 많은 다른 일을하지 않는다는 것입니다. 다른 방법으로 물어보십시오.'클래스 users_ctrl가 CI_Controller'의 구조를 어떻게 확장할까요? 만약 내가 쿼리를 가능하게 만들 필요가있는 모든 것을 제공한다면? –

+0

[생성자가 전역 함수'load_class()'를 사용하여'load' 속성을 주입하는 것처럼 보입니다.] (https://github.com/bcit-ci/CodeIgniter/blob/develop/system/core/Controller). PHP # L78). 어쨌든, 당신이 달성하고자하는 것이 합리적이라고 생각하지 않습니다. 왜 CodeIgniter를 사용한다면베이스 컨트롤러를 확장하고 싶지 않을까요? 그것은 프레임 워크 자체의 목적에 어긋납니다. – GiamPy

+0

@GiamPy, CI_Controller를 확장하는 것은 CodeIgniter (CI)의 일반적인 관행입니다. CI는 컨트롤러를 사용하여 파일과 URL 간의 연결을 만듭니다. CI 시력은 CI_Controller를 확장하는 많은 다른 컨트롤러를 가질 수 있습니다. – DFriend