Базовый контроллер CodeIgniter расширяется - PullRequest
2 голосов
/ 13 марта 2012

Я хочу расширить базовый контроллер самостоятельно.Это код файла MY_Secure.php, который я вставил в application/libraries

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

Class MY_Secure extends CI_Controller {
  public function __construct() {
    parent::__construct();
    if(!$this->session->userdata('status') == 'admin') {
        $data['message'] = '<p class="error">You shold login in admin area</p>';
        $this->load->view('admin/login', $data);
    }
  }
}
?>

А вот мой контроллер в application/controllers/category.php

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

class Category extends MY_Secure {

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

 public function index()
{
 $data['login'] = $this->session->userdata('login');
 $data['status'] = $this->session->userdata('status');

 $this->load->model('categories_model');
 $data['main_categories'] = $this->categories_model->get_main_categories();

 $this->load->view('admin/headers/main', $data);
 $this->load->view('admin/category');
 $this->load->view('admin/footer/main');
}
?>

Но у меня ошибка Fatal error: Class 'MY_Secure' not found in Z:\home\ci.local\www\application\controllers\admin\category.php on line 3Как я могу избежать этой ошибки?Что я делаю не так?

Ответы [ 5 ]

6 голосов
/ 13 марта 2012

http://codeigniter.com/forums/viewthread/182186/#862394

... поэтому поместите MY_Secure.php MY_Controller.php в приложение / ядро ​​

1 голос
/ 20 июня 2012

Нет условий для сохранения или присвоения имени MY_Controller. Вы можете назвать его, например: Mysite_Controller, если хотите.

Пожалуйста, поместите ваш класс в папку application/core, а затем расширьте этот класс из класса вашего контроллера.

Но для того, чтобы это работало правильно, вам нужно изменить значение файла конфигурации:

$config['subclass_prefix'] = 'Mysite_'; // default  it is 'MY_'
0 голосов
/ 13 марта 2012

У Фила Стерджена есть действительно хорошая запись в блоге об этом: http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-base-Classes-Keeping-it-DRY

0 голосов
/ 13 марта 2012

Я думаю, что проблема в расположении MY_Secure.php. Префикс MY_ работает, если вы не изменили его в конфигурации.

Класс MY_Secure должен быть сохранен в папке Applications Core, чтобы он работал в CodeIgniter 2.O, а не в папке Libraries.

0 голосов
/ 13 марта 2012

И вы не можете назвать свой контроллер расширений 'MY_Secure', вы должны назвать его 'MY_Controller'.Затем продлите его

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