CodeIgniter `validation_errors()` не работает

Я использую версию CodeIgniter 2.1.4. У меня проблема с отображением ошибки проверки формы. проверка формы возвращает false, но validation_errors() не отображает никаких ошибок. Я пробовал echo в controller и в view, но безрезультатно. Я даю запрос через ajax.нет ошибок php.

Контроллер:

<?php
class Dashboard extends Admin_Controller {

   public function ajax_new_dist_center($id=NULL)
   {
       $this->load->model('dist_centre_m');
       $this->load->helper(array('form', 'url'));
       $this->load->library('Form_validation');

       $validation = $this->dist_centre_m->rules;
       $this->form_validation->set_error_delimiters('<li>', '</li>');
       $this->form_validation->set_rules($validation);
       if ($this->form_validation->run() == TRUE)
       {
            if($this->dist_centre_m->create($id))
                echo 'New centre created';
            else
            {
                $this->output->set_status_header('404');
                echo 'Given center not found';
            }
       }
       else
       {
           $this->output->set_status_header('400');
           echo 'validation Failed';
           $this->load->view('alert_error');
       }
   }
}

Просмотр:

<?php echo validation_errors();?>
<p>Testing Error</p>

Модель:

class dist_centre_m extends MY_Model {
    protected $_table_name = 'distribution_centre';
    protected $_primary_key = 'dis_id';
    protected $_order_by = 'dis_id';
    public $rules = array(
        'name' => array( 
            'field'=>'name',
            'label'=>'Center name',
            'rules'=>'trim|required|xss_cleaned|min_length[3]|max_length[45]'
        ),
        'street' => array(
            'field'=>'street',
            'label'=>'Street',
            'rules'=>'trim|required|xss_cleaned|min_length[3]|max_length[45]'
        ),
        'town' => array(
            'field'=>'town',
            'label'=>'Town',
            'rules'=>'trim|required|min_length[3]|max_length[45]|required|xss_cleaned'
        ),
        'postcode' => array(
            'field'=>'postcode',
            'label'=>'Postcode',
            'rules'=>'trim|required|max_length[10]|required|xss_cleaned'
        ),
        'tel' => array(
            'field'=>'tel',
            'label'=>'Telephone number',
            'rules'=>'trim|valid|exact_length[11]|required|xss_cleaned'
        ),
    );

    public function __construct() {
        parent::__construct();
        $this->load->helper('security'); 
    }

    public function create($id=NULL){
        $data = array(
                'name'      =>$this->input->post('name',true),
                'street'    =>$this->input->post('street',true),
                'town'      =>$this->input->post('town',true),
                'postcode'  =>$this->input->post('postcode',true),
                'tel'       =>$this->input->post('tel',true),
        );
        return $this->save($data,$id);
    }  
} 

Вывод:

validation Failed

Testing Error

Ни один из связанных вопросов не работает, пожалуйста, не отмечайте дубликат.

Обновление: Моя страница запроса Ajax:

 <form id="new-center-form" method="post">
                <div class="row">
                    <div class="col-md-8">
                        <div class="form-group">
                            <label for="name">Name</label>
                            <input type="text" name="name" placeholder="Name"/>
                        </div>
                    </div>
                </div>
                <div class="row">
                    <div class="col-md-6">
                        <div class="form-group">
                            <label for='street'>Street</label>
                            <input type="text" name="street" placeholder="Street"/>
                        </div>
                    </div>
                    <div class="col-md-6">
                        <div class="form-group">
                            <label for="town">Town</label>
                            <input type="text" name="town" placeholder="Town"/>
                        </div>
                    </div>
                </div>
                <div class="row">
                    <div class="col-md-6">
                        <div class="form-group">
                            <label for="postcode">Postcode</label>
                            <input type="text" name="postcode" placeholder="Postcode"/>
                        </div>
                    </div>
                    <div class="col-md-6">
                        <div class="form-group">
                            <label for="tel">Phone</label>
                            <input type="text" name="tel" placeholder="Telephone"/>
                        </div>
                    </div>
                </div>
                <div class="row">
                    <div class="col-md-8">
                        <div class="form-group">
                            <button id="centre-submit" class="btn btn-primary pull-left">Save</button>
                        </div>
                    </div>
                </div>
            </form>


<script type="text/javascript">
    $(document).ready(function(){

        var url_new_center = '<?php echo page_url('new-center') ?>';

        $('#centre-submit').click(function(e){
            e.preventDefault();
            $.ajax({
                url:url_new_center,
                type:'post',
                data: $('new-center-form').serialize()
            }).done(function(response){
                $('#infos').html(response);
                $('#infos').slideDown();
                $('.new-centre').slideUp();
            }).fail(function(response){
                $('#errors').html(response);
                $('#errors').slideDown();
            });
        })
    });
</script>

person Sanoob    schedule 11.03.2014    source источник


Ответы (2)


Наконец, после долгого сна я понял. $this->form_validation->run() возвращает false, когда данные $_POST не найдены, и он не будет устанавливать никаких ошибок для печати. В моем запросе ajax из-за некоторых ошибок он не мог отправить никаких данных. Спасибо за curl, я смог его протестировать.

обновить

 data: $('new-center-form').serialize() // this was the error. 

Я сделал опечатку здесь. это должно быть так data: $('#new-center-form').serialize()

person Sanoob    schedule 12.03.2014

позвольте мне сделать ваш ответ более ясным.

Это не потому, что данные $_POST не найдены, как вы сказали, это на самом деле потому, что нет СВЯЗАННЫХ данных $_POST, для которых вы установили правила в своей модели.

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

'имя' , 'улица' , 'город' , 'почтовый индекс' , 'тел'

тогда валидатор CI не смог найти ни один из элементов, для которых были установлены правила, поэтому form_validation->run() обязательно вернет false

И уж точно validation_errors() ничего не покажет, потому что не к чему применять указанные правила.

person Lê Gia Lễ    schedule 03.11.2017