CI3 / Validation всегда возвращает false при начальной загрузке - PullRequest
0 голосов
/ 02 октября 2018

Я не понимаю, почему при загрузке проверка всегда возвращает false.Вот часть моего контроллера:

 // load up the validation rules for blog Info form
    $this->config->load('mh_blog_validate');
    $this->form_validation->set_rules($this->config->item('validate_blog_update'));                                                          
    if ($this->form_validation->run('validate_blog_update') === FALSE) {
        $errors     = array('message'   => $this->upload->display_errors());
                    $message    = array('message'   => 'Warning - '.$errors['message'],
                                        'class'     => 'danger',  
                                        );
                     $this->data['alert']   = bootstrap_alert($message);          
    }

Вот моя конфигурация проверки из mh_blog_validate:

 $config['validate_blog_update'] =  array(
        'title' => array(
            'field' => 'title',
            'label' => '',
            'rules' => 'required|trim|xss_clean|min_length[5]|callback_is_slug_unique_on_update[]',

            'errors' => array(
                'required'      => 'The title cannot be blank.',
                'min_length'    => 'The title must be 5 charaters or more.',
                'is_unique'     => 'The title must be unique.',
                'is_slug_unique_on_update' => 'The new title needs to be unique'
            ),
        ),

        'body' => array(
            'field' => 'body',
            'label' => '',
            'rules' => 'required|trim|xss_clean|min_length[5]',
            'errors' => array(
                'required'    => 'The body cannot be blank',
                'min_length' => 'The body must be 5 charaters or more.',
            )    

        ),
); // end validate_blog_create

Это функция обратного вызова, которую я использую в проверке:

function is_slug_unique_on_update() {      
    $new_slug    = url_title($this->input->post('title'));
    if ( $new_slug == $this->input->post('slug')) {
        // no change in slug so update
        // echo "no change in title";
        return TRUE;
    } elseif ( $new_slug !== $this->input->post('slug')) {
        // new slug
        $result = $this->Blog_model->is_slug_unique_on_update($new_slug);
        return $result; // returns FALSE if the title is not unique
    }
}

Вывод, который я получаю в представлении: «Предупреждение -», и это помещается в представление:

    if (isset($this->data['alert']){
                        echo $this->data['alert'];
                       }

Я ожидал, что проверка не выдаст ошибку, потому что я не отправил форму.Возможно, он выполняет проверку (?), Даже если я не отправил форму, которую я думаю.

+++ new edit +++

Добавлен код, который работает ниже, и я хочу знать, почему мойкод неЯ думал, что мой код следует той же схеме, нет?Форма класса расширяет CI_Controller {

    public function index()
    {
            $this->load->helper(array('form', 'url'));

            $this->load->library('form_validation');

            $this->form_validation->set_rules('username', 'Username', 'required');
            $this->form_validation->set_rules('password', 'Password', 'required',
                    array('required' => 'You must provide a %s.')
            );
            $this->form_validation->set_rules('passconf', 'Password Confirmation', 'required');
            $this->form_validation->set_rules('email', 'Email', 'required');

            if ($this->form_validation->run() == FALSE)
            {
                    $this->load->view('myform');
            }
            else
            {
                    $this->load->view('formsuccess');
            }
    }
 }

1 Ответ

0 голосов
/ 02 октября 2018

Проблема в том, что вы устанавливаете $this->data['alert'] значения, независимо от того, отправляет ли форма данные или нет.Конечно, вы можете предотвратить присвоение этой переменной, добавив условное выражение, чтобы оно устанавливалось только при наличии данных $_POST:

// load up the validation rules for blog Info form
$this->config->load('mh_blog_validate');
$this->form_validation->set_rules($this->config->item('validate_blog_update'));                                                          
if ($this->form_validation->run('validate_blog_update') === FALSE) {
    if ($_POST)
    {
        $errors     = array('message'   => $this->upload->display_errors());
                    $message    = array('message'   => 'Warning - '.$errors['message'],
                                        'class'     => 'danger',  
                                        );
                    $this->data['alert']   = bootstrap_alert($message);          
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...