codeigniter: расширение общего контроллера - PullRequest
1 голос
/ 02 ноября 2011

Я прочитал все сообщения, которые я нашел относительно этой проблемы, но ничего не работает. Я использую Codeigniter 2.02 в LAMP с Apache2.2 и PHP5.3.2

Я пытаюсь создать общий контроллер, от которого будут наследоваться мои общие контроллеры, чтобы я мог выполнять общие задачи там.

У меня есть это:

файл: parent_controller.php

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

class Parent_controller extends CI_Controller {

    public function Parent_controller()
    {
        parent::__construct();
    }

    public function index() {
        echo "Hi!";
    }
}

файл: welcome.php

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

class Welcome extends Parent_controller {

    public function __construct()
    {
        parent::__construct();
    }
}

Я пробовал следующие решения, которые нашел, но ни одно из них не работает:

  • открытая функция __contstruct () вместо открытая функция Parent_controller ()

  • родитель :: Parent_controller ();

  • поместите файл parent_controller.php в core

  • поместите файл parent_controller.php в контроллеры

  • добавление этого в config / config.php:

    function __autoload($class){
            if (file_exists(APPPATH."(controllers|core)/".$class.EXT)){
                 require_once(APPPATH.'(controllers|core)/'.$class.EXT);
           }
    }
    

Спасибо всем.

Ответы [ 2 ]

3 голосов
/ 02 ноября 2011

Взгляните на этот пост от Phil Sturgeon:

http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY

Ключ использует встроенную автозагрузку, как объяснено в его посте:

/*
| -------------------------------------------------------------------
|  Native Auto-load
| -------------------------------------------------------------------
| 
| Nothing to do with cnfig/autoload.php, this allows PHP autoload to work
| for base controllers and some third-party libraries.
|
*/
function __autoload($class)
{
    if(strpos($class, 'CI_') !== 0)
    {
        @include_once( APPPATH . 'core/'. $class . EXT );
    }
}

NOTE

В качестве заметки вы захотите поместить все свои «базовые» контроллеры в папку core для CI2 +

1 голос
/ 02 ноября 2011

Этот бит верен

публичная функция __contstruct () вместо публичной функции Parent_controller ()

Но то, что вы ищете, это префикс MY_. Поэтому, если вы создадите контроллер в папке / application / library / и вызовете файл MY_Controller.php и класс MY_Controller, он будет работать.

Вы также можете изменить префикс MY_ на любой другой, который вы хотите в файле config.php. Ищите:

/*
|--------------------------------------------------------------------------
| Class Extension Prefix
|--------------------------------------------------------------------------
|
| This item allows you to set the filename/classname prefix when extending
| native libraries.  For more information please see the user guide:
|
| http://codeigniter.com/user_guide/general/core_classes.html
| http://codeigniter.com/user_guide/general/creating_libraries.html
|
*/
$config['subclass_prefix'] = 'MY_';

Для дальнейшего чтения и более подробного объяснения см. http://codeigniter.com/user_guide/general/core_classes.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...