Codeigniter - CI_Controller против контроллера - PullRequest
12 голосов
/ 10 апреля 2011

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

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

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

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

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

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

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

Заранее спасибо.

Ответы [ 2 ]

21 голосов
/ 10 апреля 2011

В любой версии до 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 легко.Как всегда, обязательно прочитайте журнал изменений и инструкции по обновлению при обновлении до новой версии.

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

8 голосов
/ 10 апреля 2011

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

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

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