Подтвердить что ты не робот

Codeigniter - CI_Controller vs Controller

Я пытаюсь следовать некоторым учебным пособиям в отношении CodeIgniter, в частности о расширении контроллера, следующий учебник говорит, что в файле MY_Controller я должен указать следующее:

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

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

Однако, когда я это делаю, я получаю следующую ошибку:

Неустранимая ошибка: Class 'Controller' не найден в /home/chimeri 1/public_html/application/libraries/MY_Controller.php в строке 3

Если, однако, я положил CI_Cntroller вместо Controller, он работает. В чем разница?

Также должен быть добавлен закрывающий тег php ?> в нижней части файла MY_Controller, некоторые учебные пособия пропустили это?

Спасибо заранее.

4b9b3361

Ответ 1

В любой версии до 2, Controller является базовым классом контроллера (который вы расширите с помощью MY_Controller). В версии 2 и выше вам нужно расширить CI_Controller, так как это новое имя для базового класса контроллера.

Для всех, кто сталкивался с этим, CI2 переместил несколько файлов классов из /libraries в новый каталог /core. Если вы посмотрите в system/core, каждый класс, который вы видите там, теперь использует префикс CI_ - включая Model (теперь CI_Model), Input, Loader, Lang и многие другие. Если вам необходимо перегрузить или расширить эти библиотеки, теперь они должны быть в каталоге application/core. Вы по-прежнему будете использовать префикс MY_ для их расширения или того, что вы установили в своем $config['subclass_prefix'].

С выпуском версии 2 CI разбился на две ветки: Core и Reactor. Не путайте - они оба CodeIgniter, но любая ссылка на "Reactor" - это текущая версия сообщества, которая предлагается в качестве основной загрузки на веб-сайте, а Core - это более старая версия EllisLabs с меньшими возможностями. На веб-сайте CI:

"Проще говоря, Reactor = CodeIgniter".

Вы можете узнать больше об изменениях ветвей здесь.

Модернизация с 1.7.2 до 2.X проста. Как всегда, убедитесь, что прочитали журнал изменений и инструкции по обновлению при обновлении до новой версии.

Что касается закрывающего тега: он не является обязательным, но вы должны избегать его, когда это возможно, поскольку оно может вводить пробел в script (что-либо после закрывающего тега), что может испортить заголовки и появляться в вашем вывод. Как вы знаете, руководство пользователя рекомендует вам не использовать его.

Ответ 2

В CodeIgniter 2.x класс Controller был переименован в CI_Controller. Учебное пособие, которое вы используете, скорее всего, использует CodeIgniter 1.7 или ранее, когда Controller был правильным классом для расширения.

Что касается закрывающего тега ?>, Руководство по стилю CodeIgniter рекомендует пропустить его, так как случайное пустое пространство после этот тег может быть проблематичным.