Застрял в реализации класса CodeIgniter Controller - PullRequest
1 голос
/ 06 октября 2011

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

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

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

<?php

class Test extends CI_Controller {

    function Test()
    {
        parent::CI_Controller();

        $this->load->scaffolding('entries');
    }

    function index() 
    {
        $data['muck'] = 'test test test';
        $data['kookoo'] = 'howdy howdy hi';
        $data['hi'] = 'holla';
        $data['yo'] = 'fa la la';
        $data['zoom'] = '1234';
        $data['array'] = array('hi','howdy','hey','sup');
        $this->load->view('test_view', $data);
    }

}

?>

Когда я загрузил страницу без содержимого внутри function Test(), я заметил, что система не может найти «Контроллер». Я обнаружил, что в этом руководстве используется более старая версия CI и что «CI_Controller» является подходящим именем для класса Controller. Теперь с приведенным выше кодом я получаю эту ошибку:

Fatal error: Call to undefined method CI_Controller::CI_Controller() in /Users/michaelsanger/Sites/CodeIgniter/application/controllers/test.php on line 7

Я искал и действительно не уверен, почему он не может определить это.

спасибо заранее!

1 Ответ

4 голосов
/ 06 октября 2011

Вы смешиваете вещи из разных версий, 1.7, которые в основном сосредоточены на построении классов в стиле PHP4 (используя метод с тем же именем, что и у класса в качестве конструктора, вместо этого выделенный магический метод __construct (), доступный в php 5)

Кроме того, помните, что строительные леса отсутствуют в последних версиях . Вы не сказали, какой вы используете, я полагаю, V2. Если вы используете более старую версию, 1) используйте самую последнюю :) 2) родительский класс был просто Controller.

Так и должно быть

class Test extends CI_Controller {

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

         //$this->load->scaffolding('entries');
     }

     function Test()
     {
      // this will call a method name test, so maps to a URL like Test/test

     }

}

Обратите внимание, что нет необходимости расширять родительский контроллер, если, конечно, вы не хотите "автозагрузить" библиотеку, чтобы она была доступна для всех методов.

CI известен своей великолепной и простой документацией, поэтому всякий раз, когда вы используете учебник, найденный в сети, особенно если он немного стар (в терминах Интернета), возьмите в привычку переходить к user_guide (который также поставляется вместе с установочными файлами для локального просмотра) всякий раз, когда у вас возникают сомнения или проблемы.

Например, проверьте страницу контроллеров , вы скоро увидите, что не так с вашим фрагментом (и учебным пособием, на сегодняшний день)

UPDATE:

В маршрутах вы устанавливаете маршрут, который отображается на контроллер (/ метод). Цитирование журнала изменений:

Версия 2.0.0

Дата выхода: 28 января 2011 г. Hg Tag: v2.0.0

General changes

PHP 4 support is removed. CodeIgniter now requires PHP 5.1.6.
Scaffolding, having been deprecated for a number of versions, has been removed.

Так что я не знаю, что ты имеешь в виду под лесами. Глядя на ваш маршрут, CI ожидает контроллер с именем "scaffolding_trigger", который должен быть перенаправлен на контроллер "scaffolding". Если какой-либо из них присутствует, вы получите ошибку 404. Пожалуйста, выберите версию и придерживайтесь ее, не путайте вещи! и не полагайтесь на учебники, они не всегда в курсе последних изменений.

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