Проверка формы перестает работать при визуализации страниц с использованием другого контроллера

Я написал быстрый класс библиотеки CI для отображения моих страниц, поэтому мне не пришлось бы постоянно печатать «$ this-> load-> view» и DRY. Теперь, когда я перерисовываю свою контактную форму после передачи недопустимых данных, сообщения об ошибках не отображаются.

Класс библиотеки:

class Page extends CI_Controller { public function render($page, $data) { // $page should be path to page view $this->load->view('fragments/header', $data); $this->load->view('fragments/navigation'); $this->load->view($page); $this->load->view('fragments/navigation'); $this->load->view('fragments/footer'); } } 

и контроллер:

 class Contact extends CI_Controller { public function __construct() { parent::__construct(); $this->load->helper('form'); $this->load->library(array('form_validation', 'email', 'page')); } public function index() { $this->form_validation->set_rules('sender_name', 'From', 'required'); $this->form_validation->set_rules('sender_email', 'Email', 'required|valid_email'); $this->form_validation->set_rules('subject', 'Subject', 'required'); $this->form_validation->set_rules('message', 'Message', 'required'); if ($this->form_validation->run() === FALSE) { $this->load->library('page'); $this->page->render('contact/contact', array('title' => 'Contact Me')); // pass in page title /* IT WORKED THIS WAY $this->load->view('fragments/header', array('title' => 'Contact Me')); // pass in page title $this->load->view('fragments/navigation'); $this->load->view('contact/contact'); // TODO maintain form state $this->load->view('fragments/navigation'); $this->load->view('fragments/footer'); * */ } //SNIP 

вид контактной формы:

 <h1>Contact Me</h1> <?php echo form_open('contact', 'id="contact_form"'); ?> <label for="sender_name">Name:</label> <?php echo form_input('sender_name'); ?> <span class="error"><?php echo form_error('sender_name'); ?></span> <label for="sender_email">Email:</label> <?php echo form_input('sender_email'); ?> <span class="error"><?php echo form_error('sender_email'); ?></span> <label for="subject">Subject:</label> <?php echo form_input('subject'); ?> <span class="error"><?php echo form_error('subject'); ?></span> <label for="message">Message:</label> <?php echo form_textarea('message'); ?> <span class="error"><?php echo form_error('message'); ?></span> <?php echo form_submit('submit', 'Send'); ?> 

Как я могу визуализировать страницы с помощью этого помощника и все еще получать сообщения об ошибках из библиотеки form_validation?

Создайте представление под названием template.php в вашей папке просмотра со следующим кодом в нем:

 <?php $this->load->view('fragments/header', $this->_ci_cached_vars); // pass $data vars $this->load->view('fragments/navigation'); $this->load->view($view); $this->load->view('fragments/navigation'); $this->load->view('fragments/footer'); 

Затем используйте приведенный ниже код контроллера:

 public function index() { $this->form_validation->set_rules('sender_name', 'From', 'required'); $this->form_validation->set_rules('sender_email', 'Email', 'required|valid_email'); $this->form_validation->set_rules('subject', 'Subject', 'required'); $this->form_validation->set_rules('message', 'Message', 'required'); if ($this->form_validation->run() === FALSE) { $data = array( 'view' => 'contact/contact', 'title' => 'Contact Me'); $this->load->view('template', $data); } 

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