2012-05-30 3 views
0

Я использую CodeIgniter и есть основной вид, который вызывает другой вид, основанный на PARAM я прохожу его, так, например, я мог бы передать что-то вроде этого от контроллера:CodeIgniter: Обнаружение, если произошла ошибка ввиду

$data['view'] = 'login'; 

$this->load->view('main', $data); 

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

Это прекрасно работает, если я еще не обработал никаких просмотров, например, если я получаю ошибку PHP в контроллере. Однако, если я получу ошибку в представлении, она будет обрабатывать основной вид дважды (следовательно, html/head/body tags дважды)

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

Я знаю, что он находится в середине обработки текущего представления, поэтому нет смысла очищать вывод чего-то, что в настоящее время генерирует вывод, но все равно для этого. Значит, когда страница ошибок попадает, очищайте что-нибудь, сгенерированное, а затем просто выводите все с страницы с ошибкой?

ответ

1

Строки данных - хорошая идея, однако я не хотел переписывать что-либо в приложении, у нас должно быть около 200 просмотров.

Я закончил играть с буфером объекта в PHP и поместить его в верхней части каждого файла ошибки:

ob_end_clean(); 
ob_end_flush(); 
@ob_clean(); 

ob_start(); 
ob_clean(); 

//show code 

exit(); 
0

Вы можете создать строку, возвращая свои взгляды как данные, а не отправлять их в браузере:

$output = $this->load->view('my_view', $data, TRUE); 

Тогда в конце концов, установил окончательный выходной строки:

$this->output->set_output($output); 
0

вы можете вызвать представление в представлении.

так что если вы делаете то, что ваши говорят там, в контроллере:

$data['view'] = 'login'; 
$this->load->view('main', $data); 

затем в файле представления main.php, вы могли бы сделать что-то вроде этого:

<? if(isset($view)): 
$this->load->view($view); 
endif;?> 

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

Смежные вопросы