如何在代码点火器中使用重定向显示验证错误



我已经处理了一个问题一段时间了。如何在函数中使用重定向设置验证错误?这是我在控制器中的代码:

function send()
{
    $this->form_validation->set_rules('e-mail', 'Email', 'trim|required|valid_email');
    $this->form_validation->set_rules('cellphone', 'Cellphone Number', 'trim|required|is_natural');
    $this->form_validation->set_message('required', '%s is required.');
    $this->form_validation->set_message('valid_email', '%s is not a valid Email Address');
    $this->form_validation->set_message('is_natural', '%s can only contain numbers.');
    $this->form_validation->set_error_delimiters('<li>', '</li>');
    if($this->form_validation->run() == FALSE)
    {
        redirect ('/');
    }
    else
    {
        echo '<pre>';
        print_r($_POST);
        echo '<pre>';
    }
}

这是我在视图文件中使用的代码:

<? if (validation_errors())
{   
echo '<div id="validation_errors" title="Error:">';
echo '<div class="response-msgs errors ui-corner-all"><span>Errors:</span><br /><ul>';
echo validation_errors();
echo '</ul></div>';
echo '</div>';
}
?>

我找到了这样做的方法。重定向不会保留要显示的数据。我使用下面的代码来解决问题:

if($this->form_validation->run() == FALSE)
{
    $this->index();
}
我知道

有点晚了,但这种方法对我来说很有奇效。

如果要使用与加载表单的函数不同的函数来验证表单,则可以通过将 validation_errors() 方法传递给$this->session->set_flashdata(),将validation_errors()发送到redirect()的任何页面,如下所示:

if ($this->form_validation->run() == FALSE) {
    $this->session->set_flashdata('error', validation_errors());
    redirect('/');
}

在您希望接收错误或消息的控制器函数中,您可以像这样将它们设置为 $data 数组:

if (!empty($this->session->flashdata('message'))) {
    $data['message'] = $this->session->flashdata('message');
} elseif (!empty($this->session->flashdata('error'))) {
    $data['error'] = $this->session->flashdata('error');
}

在我的观点中,我通常包括:

<?php if (isset($message)) {
    echo '<p class="alert alert-info">'.$message.'</p>';
} elseif (isset($error)) {
    echo '<p class="alert alert-danger"><strong>Error: </strong>'.$error.'</p>';
}?>

使用 Twitter 引导类来格式化消息有助于区分它们。

我包含了message flashdata,以便您可以看到要发送的任何类型的消息或错误,您都可以针对所有信息,警告,成功和错误消息以不同的方式格式化它们。

根据我的评论:

function index()
{
    $this->load->library('form_validation');
    $data = array
    (
        'Param' => 'Value'
    );
    if($this->input->post('cellphone', true) !== false)
    {
        if($this->form_validation->run() != FALSE)
        {
            echo '<pre>' . print_r($_POST, true) . '</pre>';
        }
    }
    $this->load->view('index', $data);
}

首先,您需要更改表单,使其指向当前页面,即 current_url()site_url('controller/index') .

当您转到index而不发布时,它将简单地跳过验证。提交表单后,它将运行验证。

然后,可以使用内置的 form_errorvalidation_errors 方法在index视图中显示错误。

最后我

得到了一个重定向的解决方案validation_errors

这是用于传递会话数据中的validation_errors,我是这样做的

if ($this->form_validation->run()) {
        $data = array(
            'email' => $this->input->post('email'),
            'is_login' => true
        );
        $this->session->set_userdata($data);
        redirect($this->input->post('redirect'));
    }
    else
    {
        $data = array (
            'errors' => validation_errors(),
            'is_login' => false
        );
        $this->session->set_userdata($data);
        redirect($this->input->post('redirect'));
    }

在我使用的页面中

        $this->session->set_flashdata('redirectToCurrent', current_url());
    if ($this->session->userdata('is_login'))
    {
        echo "You are using this as : </br>" . $this->session->userdata('email');
        echo "</br><a href='/logout'>Logout</a>";
    }
    else
    {
        echo form_open('login');
        echo "" . $this->session->userdata('errors');
        echo "email : " . form_input('email');
        echo "Password : " . form_password('password');
        echo form_submit('submit', 'Login');
        echo form_hidden('redirect',$this->uri->uri_string());
        echo form_close();
    }   

我希望你喜欢这个快速的解决方案

相关内容

  • 没有找到相关文章