코드 점화기 컨트롤러 클래스를 어떻게 확장합니까?
-
06-07-2019 - |
문제
내 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 {
....
당신이 만든 확장 된 컨트롤러 클래스를 사용할 수 있으므로 사용할 수 있습니다. 나는 이것이 기본 컨트롤러를 덮어 쓰는 것이 더 좋다고 생각하지만 그것은 또한 작동 할 것입니다.
다른 팁
이것은 더 나은 접근법입니다. 다음을 수행하십시오.
- 다음 디렉토리로 이동하십시오.
your_ci_app/application/core/
호출 된 PHP 파일을 만듭니다MY_Controller.php
(이 파일은 상위 상위 수업이 상주하는 곳입니다) 방금 만든 파일을 열고 다음과 같이 여러 클래스를 추가하십시오.
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"); } }
이 디렉토리에서 자녀 컨트롤러를 만듭니다
your_ci_app/application/controllers/
. 나는 그것을 부를 것이다adminchild.php
열려 있는
adminchild.php
컨트롤러 코드를 작성하고 다음과 같이 부모 클래스의 이름을 확장하십시오.class Adminchild extends Admin_Parent { function __construct() { parent::__construct(); } function test() { parent::test(); } }
CodeIgniter 코어 파일을 "크래킹"하지 않는 것이 좋습니다. 기본 확장 가능성을 더 잘 사용하고 그들에게 맞도록 노력하십시오.
PHP 라이브러리 / CMS에 대해 권장하는 것과 동일한 규칙입니다. 이 규칙은 다음과 같은 이유가 거의 없습니다 .- 핵심 파일에서 수천 개의 메모를 고려하여 Takint없이 업그레이드하는 능력; - 이식성; - 코드를 공유 할 수있는 가능성 - 예를 들어, 이것은 필요한 경우 귀하와 친구 모두가 사용할 수 있으며, 도서관을 최신 상태로 유지하는 데 도움이 될 것입니다.
다시 말해, 이것은 훨씬 더 전문적이며 미래에 유용성, 이식성 및 업데이트 응용 프로그램 가능성으로 귀하에게 지불합니다.
당신의 개인적인 질문에 대해 ...
나에 관해서는, 기본 Codeigniter 컨트롤러를 확장하는 데 필요한 모든 것을 갖춘 자신의 라이브러리를 만들고이 라이브러리를 컨트롤러 생성자에로드하면 완료됩니다. 더 나은 유용성을 만드는 유일한 것은 도서관에 짧은 이름을 제공하는 것입니다.
이렇게하면 필요한 것을 다른 조각으로 나누고 별도의 라이브러리에 넣을 수도 있습니다 : WebFeatures Adminfeatures 등.
그런 다음 컨트롤러 생성자에 필요한 라이브러리를로드하면 완료됩니다.
추신 : 제안 된 방법은 "올바른"OOP 개념에 맞지 않지만 동시에 사용 된 라이브러리의 무결성을 잊지 말아야합니다.
위의 모든 것은 전문 웹 개발에서 7 년간의 경험을 한 번 더 볼 수 있으므로 따르지 않으면 도움이되기를 바랍니다.
안부, 안톤