Почему Code Igniter дает мне белую страницу?

Эй, не уверен, почему CodeIgniter дает мне пустую страницу, когда я загружаю простую модель. Я ломаю код назад и не могу понять, что ломается. Вот контроллер:

class Leads extends Controller {

function Leads() {
    parent::Controller();
    $this->load->scaffolding('leads');
  }

function index() {
    $data = array( 'title' => 'Lead Management' );

    $this->load->view('html_head', $data);
    $this->load->view('leads/home');
    $this->load->view('html_foot');

  }

function view() {
    $this->load->model('Leads');
    $this->load->view('html_head');
    $this->load->view('leads/view');
    $this->load->view('html_foot');
  }

}

Вот модель:

class Leads extends Model {

function Leads()    {
    parent::Model();
}

}

Единственный способ, которым я не получаю белую страницу в /view, это если я закомментирую загрузку модели. Я понятия не имею, что я делаю неправильно, я копирую примеры и структуру буквально прямо с сайта CI.

7 ответов

Решение

Оба ваших класса называются "Ведущие". Когда CI включает их, они загружаются в одно и то же пространство имен. У вас наверное есть "Cannot redeclare class 'Leads'" ошибка. Попробуйте переименовать модель, и все будет в порядке.

Изменить: предположение подтверждено

Ах, классический Codeigniter белый экран смерти. Я столкнулся с этим в первый раз, когда я использовал CI. Невероятно разочаровывает, что такая популярная структура может вызвать что-то подобное без вывода ошибок.

В моем конкретном случае это было связано с тем, что я пытался использовать класс Database с MySQLi, но в моей целевой среде не был установлен модуль MySQLi. По какой-то причине CI подавил все обычные сообщения об ошибках, поэтому 2-минутное расследование превратилось в 2-часовое расследование.

Так что, как говорится, я бы проверил следующие вещи:

  • error_reporting установлен в E_ALL в вашем php.ini, и display_errors включен.
  • Включите log_errors также.
  • Убедитесь, что используемые вами классы не зависят от специального модуля PHP, которого у вас может не быть

Если вы не можете найти ничего с ошибкой, вам придется копать глубже. Если у вас установлен xdebug, я настоятельно рекомендую использовать это... окружить ваш код трассировкой и посмотреть, где он задыхается.

В конце концов мне пришлось искать причину моего WSOD, просматривая сами классы фреймворка и выводя выходные данные (xdebug не был доступен). Это не весело, но в итоге это сработало.

Как и предположил Кэсси, это проблема с вашим наименованием - CI не может иметь дело с моделями и контроллерами с одинаковыми именами. Переименовать тебя Leads модель к чему-то другому и попробуйте перезагрузить страницу. Это должно решить проблему.

Я различаю свои контроллеры и модели, добавляя имена _controller или _model к классам. Это исключает путаницу классов. Попробуйте переименовать их как
Leads_Controler и Leads_Model.

Другая причина "белого экрана смерти" - включение кэширования запросов или журнала lutputtibg, когда соответствующая папка недоступна для записи. Это меня несколько раз!

Просто решил ту же проблему после очень неприятной ночи, проведенной в библиотеках CI.

Как отметил Зомбат, моя проблема заключалась в том, что я забыл установить модуль php5-mysql в свою коробку linux.

Как только apt-get установил модуль mysql, все начало воспроизводиться, как и ожидалось.

Нуб, я знаю. Но я ожидал бы лучшего поведения CI при обработке такого рода исключений. Одна строка журнала спасла бы кучу часов и ругательств.

У меня была белая пустая страница после использования моей первой модели. Решение заключается в том, что если вы используете Codeigniter 2+, вам нужно перейти от CI_Model вместо Model. поэтому класс модели должен сказать class myModel extends CI_Model, Это помогло мне после 4 часов поиска.

Другие вопросы по тегам