Почему 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 часов поиска.