Codeigniter extending extended MY_Controller

前端 未结 5 559
慢半拍i
慢半拍i 2020-12-09 21:07

I have strictly followed the how-to article by Phil Sturgeon, to extend the base controller. But I get still some errors.

My 3 classes:

// applicatio         


        
相关标签:
5条回答
  • 2020-12-09 21:26

    You should place Public_controller in with MY_Controller inside MY_Controller.php

    // application/libraries/MY_Controller.php
    class MY_Controller extends Controller{
        public function __construct(){
            parent::__construct();
        }
    }
    
    class Public_Controller extends MY_Controller{
        public function __construct(){
            parent::__construct();
    
        }    
    }
    

    I use __construct everywhere and it works fine I recently wrote up an article on how to do this in relation to wrapping your auth logic into your extended controllers. It's about half way down when I start discussing constructing your controllers.

    0 讨论(0)
  • 2020-12-09 21:41

    You need to require the Public Controller in your MY_Controller

    // application/libraries/MY_Controller.php
    class MY_Controller extends Controller{
        public function __construct(){
            parent::__construct();
        }
    }
    
    require(APPPATH.'libraries/Public_Controller.php');
    

    You get the error because Public_Controller was never loaded. Doing this would allow you to extend from Public_Controller

    I like what you are doing because I do that all the time.

    You can do this also in your MY_Controller when you want to create an Admin_Controller

    // application/libraries/MY_Controller.php
    class MY_Controller extends Controller{
        public function __construct(){
            parent::__construct();
        }
    }
    
    require(APPPATH.'libraries/Public_Controller.php'); // contains some logic applicable only to `public` controllers
    require(APPPATH.'libraries/Admin_Controller.php'); // contains some logic applicable only to `admin` controllers
    
    0 讨论(0)
  • 2020-12-09 21:48

    Problem was solved here: http://devcrap.net/pl/2011/09/04/codeigniter-dziedziczenie-z-my_controller-extends-my_controller/. In polish but code is good :]

    0 讨论(0)
  • 2020-12-09 21:48

    I had problem like this,After some search I found error was made myself,Because my controller class name was MY_Controller but file name was My_Controller[Case not matching]. Note:- In localhost I didnt have any error.

    In extended controller I Use

    class Home  extends MY_Controller{
       function __construct() {
       parent::__construct();
      }
    }
    

    even I got the error.

    After changing my file name to MY_Controller it started to work well.

    0 讨论(0)
  • 2020-12-09 21:51

    I have a custom controller class called MY_Controller it extends CI_Controller and it works fine. It is located at application/core and it has custom functions lo load views in my site.

    I use an abstract class My_app_controller that extends MY_Controller for my_app specific behabior, I want every controller in my_app to extend this abstract class. (I use diferent apps in the site, so some apps will extend My_app_controller and other apps will extend My_other_apps_controllers)

    But when I try to extend My_app_controller from any controller in my application, "Main_app_controller extends My_app_controller" generates a Class 'My_app_controller' not found exception.

    I found two solutions:

    1. use include_once in Main_app_controller.php file.
      include_once APPPATH.'controllers/path/to/My_app_controler.php';

    2. break the "one class per file" rule of code igniter and define my My_app_controller just in the same file MY_Controller is (under application/core).

    Manual says:

    Use separate files for each class, unless the classes are closely related

    Well... they are.

    Anyway, I prefered to use the include_once solution as I think it is better to have one file per class and My_app_controller is located under application/controllers/my_app folder. (so application/controllers/other_apps will exist)

    0 讨论(0)
提交回复
热议问题