2015-12-03 7 views
1

Поскольку я очень доволен командой show_404(), которую вы можете назвать повсюду, чтобы показать 404-Error-страницу, я действительно хотел реализовать show_403() для запросов без разрешений.CodeIgniter не выполняет автозагрузку моего основного расширения

Я создал файл application/core/MY_Exceptions.php и добавил следующий код:

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

class MY_Exceptions extends CI_Exceptions { 

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

    public function show_403($page = '', $log_error = TRUE) 
    { 
     //do some stuff 
     echo "test"; 
    } 
} 

Тогда я буду называть его в контроллере application/controllers/Welcome.php так:

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

class Welcome extends CI_Controller { 

    public function index() 
    { 
     // show_404(); // <-- this works! 
     show_403();  // <-- this works not! 
    } 
} 

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

Fatal error: Call to undefined function show_403() 

Как вы, возможно, заметили, я даже тестировал это на ванильной установке CodeIgniter, поэтому вы должны иметь возможность воспроизвести эту ошибку только с этими двумя файлами.

Я знаю, что я могу загрузить расширение вручную, но это не имеет элегантность использования show_403(), где и когда я хочу ...

маршрутизация настроена правильно, CodeIgniter является версия 3.0.3, PHP является версии 5.6.12. Разрешения файловой системы до application/core/MY_Exceptions.php даже были установлены для 777 для целей отладки.

+0

проверьте первую часть ответа. –

ответ

1

Ваш класс исключения не загружен, поэтому он дает эту ошибку.

Загрузите свой класс, как этот

$excep = load_class('Exceptions', 'core', $this->config->item('subclass_prefix')); 
    echo $excep->show_403();// will echo test 

Еще один suggesion является использование helpers для этого,

Добавьте свой код в application/helpers с именем файла error_helper

public function show_403($page = '', $log_error = TRUE) 
{ 
    //do some stuff 
    echo "test"; 
} 

Вызов вашей функции

$this->load->helper('error_helper'); 
echo show_403(); 
+0

Как я уже сказал, «Я знаю, что могу загрузить расширение вручную». Могу ли я ожидать, что MY_-Extensions загружаются автоматически? (это, например, случай с библиотеками!) –

+0

для моих знаний, это должно быть liak, но его не загружать ... –

Смежные вопросы