문제

내 CI System Libraries 디렉토리에는 dd_controller.php라는 새로운 클래스가 있습니다. 이 파일은 다음과 같습니다.

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class DD_Controller extends Controller 
{   
    protected $ddauthentication;


    function __construct()
    {           
        parent::Controller();
        $this->ddauthentication = "Authenticated";
    }
}
?>

내 응용 프로그램 컨트롤러는 다음과 같이 정의됩니다.

class Inquiry extends DD_Controller 
{...}

문의 클래스는 컨트롤러를 확장 할 때 잘 작동하지만

치명적인 오류 : C : Development LocalHost Applications Quilery Controllers Inquiry.php에서 'dd_controller'클래스가 없습니다.

dd_controller를 확장 할 때. 구성 파일에는 접두사가 다음과 같이 정의되어 있습니다.

$config['subclass_prefix'] = 'DD_';

내가 무엇을 놓치고 있는지에 대한 아이디어가 있습니까?

티아

도움이 되었습니까?

해결책

dd_controller.php는/system/application/libraries에 있어야합니다.

여러 앱에 동일한 CI를 사용하고 있으며 모두 컨트롤러를 사용자 정의로 확장 할 수 있으려면 동일한 파일에서 기본 컨트롤러 클래스를 확장 할 수 있습니다.

컨트롤러 클래스 아래의 System/Libraries/Controller.php에서 :

class Mega_Controller extends Controller {
    function Mega_Controller()
    {
        parent::Controller();
        // anything you want to do in every controller, ye shall perform here.
    }
}

그런 다음 앱 컨트롤러 에서이 작업을 수행 할 수 있습니다.

class Home extends Mega_Controller {
    ....

당신이 만든 확장 된 컨트롤러 클래스를 사용할 수 있으므로 사용할 수 있습니다. 나는 이것이 기본 컨트롤러를 덮어 쓰는 것이 더 좋다고 생각하지만 그것은 또한 작동 할 것입니다.

다른 팁

이것은 더 나은 접근법입니다. 다음을 수행하십시오.

  1. 다음 디렉토리로 이동하십시오. your_ci_app/application/core/ 호출 된 PHP 파일을 만듭니다 MY_Controller.php (이 파일은 상위 상위 수업이 상주하는 곳입니다)
  2. 방금 만든 파일을 열고 다음과 같이 여러 클래스를 추가하십시오.

    class Admin_Parent extends CI_Controller {
        public function __construct() {
            parent::__construct();
        }
    
        public function test() {
            var_dump("from Admin_Parent");
        }
    }
    
    class User_Parent extends CI_Controller {
    
        public function __construct() {
            parent::__construct();
        }
    
        public function test(){
            var_dump("from User_Parent");
        }
    
    }
    
  3. 이 디렉토리에서 자녀 컨트롤러를 만듭니다 your_ci_app/application/controllers/ . 나는 그것을 부를 것이다 adminchild.php

  4. 열려 있는 adminchild.php 컨트롤러 코드를 작성하고 다음과 같이 부모 클래스의 이름을 확장하십시오.

    class Adminchild extends Admin_Parent {
    
        function __construct() {
            parent::__construct();
        }
    
        function test() {
            parent::test();
        }
    
    }
    

CodeIgniter 코어 파일을 "크래킹"하지 않는 것이 좋습니다. 기본 확장 가능성을 더 잘 사용하고 그들에게 맞도록 노력하십시오.

PHP 라이브러리 / CMS에 대해 권장하는 것과 동일한 규칙입니다. 이 규칙은 다음과 같은 이유가 거의 없습니다 .- 핵심 파일에서 수천 개의 메모를 고려하여 Takint없이 업그레이드하는 능력; - 이식성; - 코드를 공유 할 수있는 가능성 - 예를 들어, 이것은 필요한 경우 귀하와 친구 모두가 사용할 수 있으며, 도서관을 최신 상태로 유지하는 데 도움이 될 것입니다.

다시 말해, 이것은 훨씬 더 전문적이며 미래에 유용성, 이식성 및 업데이트 응용 프로그램 가능성으로 귀하에게 지불합니다.

당신의 개인적인 질문에 대해 ...

나에 관해서는, 기본 Codeigniter 컨트롤러를 확장하는 데 필요한 모든 것을 갖춘 자신의 라이브러리를 만들고이 라이브러리를 컨트롤러 생성자에로드하면 완료됩니다. 더 나은 유용성을 만드는 유일한 것은 도서관에 짧은 이름을 제공하는 것입니다.

이렇게하면 필요한 것을 다른 조각으로 나누고 별도의 라이브러리에 넣을 수도 있습니다 : WebFeatures Adminfeatures 등.

그런 다음 컨트롤러 생성자에 필요한 라이브러리를로드하면 완료됩니다.

추신 : 제안 된 방법은 "올바른"OOP 개념에 맞지 않지만 동시에 사용 된 라이브러리의 무결성을 잊지 말아야합니다.

위의 모든 것은 전문 웹 개발에서 7 년간의 경험을 한 번 더 볼 수 있으므로 따르지 않으면 도움이되기를 바랍니다.

안부, 안톤

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top