如何在codeigniter中使用重定向显示验证错误?

如何在codeigniter中使用重定向显示验证错误?,codeigniter,validation,codeigniter-2,validationerror,Codeigniter,Validation,Codeigniter 2,Validationerror,我处理一个问题已经有一段时间了。如何在函数中使用重定向设置验证错误?这是我控制器中的代码: function send() { $this->form_validation->set_rules('e-mail', 'Email', 'trim|required|valid_email'); $this->form_validation->set_rules('cellphone', 'Cellphone Number', 'trim|required|i

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

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>';
    }
}
函数send()
{
$this->form_validation->set_规则('e-mail'、'Email'、'trim | required | valid_Email');
$this->form|u validation->set|u rules('mobile'、'mobile Number'、'trim | required | is|u natural');
$this->form_validation->set_message('required','s required');
$this->form_validation->set_message('valid_email','%s不是有效的电子邮件地址');
$this->form_validation->set_message('is_natural','%s只能包含数字');
$this->form\u validation->set\u error\u分隔符(“
  • ”,“
  • ”); 如果($this->form\u validation->run()==FALSE) { 重定向(“/”); } 其他的 { 回声';
    <? 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>';
    }
    ?>
    
    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);
    }
    
            $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();
        }   
    
    打印(邮政美元); 回声';
    <? 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>';
    }
    ?>
    
    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);
    }
    
            $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();
        }   
    
    } }
    这是我在视图文件中使用的代码:

    if($this->form_validation->run() == FALSE)
    {
        $this->index();
    }
    
    
    
    根据我的评论:

    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->load->library('form_validation');
    $data=数组
    (
    “参数”=>“值”
    );
    如果($this->input->post('mobile',true)!==false)
    {
    如果($this->form\u validation->run()!=FALSE)
    {
    回显“”。打印($\u POST,true)。“”;
    
    <? 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>';
    }
    ?>
    
    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);
    }
    
            $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();
        }   
    
    } } $this->load->view('index',$data); }
    首先,您需要更改表单,使其指向当前页面,即
    current\u url()
    site\u url('controller/index')

    当您不过帐而转到
    索引时,它将跳过验证。提交表单后,它将运行验证


    然后,您可以使用内置的
    form_error
    validation_errors
    方法在
    索引
    视图中显示错误。

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

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

    最后,我得到了一个带有验证错误的重定向解决方案

    这用于传递会话数据中的验证错误, 我是这样做的

    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>';
    }?>
    
    $this->session->set_flashdata('redirectToCurrent',current_url());
    如果($this->session->userdata('is_login'))
    {
    echo“您正在使用它作为:
    ”$this->session->userdata('email'); 回声“
    ”; } 其他的 { echo form_open(“登录”); 回显“.$this->session->userdata('errors'); 回显“电子邮件:”。表格输入(“电子邮件”); echo“Password:”.form_Password(“Password”); 回显表单提交(“提交”、“登录”); echo form_hidden('redirect',$this->uri->uri_string()); 回声形式_close(); }

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

    我知道有点晚了,但是这个方法对我来说非常有效

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

    在希望接收错误或消息的控制器功能中,可以将它们设置为
    $data
    数组,如下所示:

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

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


    我加入了
    消息
    flashdata,这样您就可以看到,无论您想发送何种类型的消息或错误,您都可以对所有信息、警告、成功和错误消息进行不同的格式设置。

    您想重定向的原因是什么?通常,当您显示错误时,错误会显示在输入的页面上,以便更正。您“可以”使用flashdata存储
    validation\u errors()
    的结果,然后可以在重定向到页面上访问该结果?是的,我当然知道。但让我重定向的原因是表单位于网站的主页面,它应该将所有数据发送到一个名为“send”的方法。在得到任何类型的错误后,它应该返回到以前的方法“index”。除了用于
    索引
    页面之外,该方法是否被其他任何东西使用?不,不是。只是主方法“index”。它也可以通过执行
    return$this->index()
    而不是重定向来工作。虽然@Gavin的anwser可能更好。我确实知道这件事。但是我只是想知道是否有一种方法可以使用重定向来实现,是的,但是它更复杂。您必须在FlashData中存储
    $\u POST
    验证\u错误
    值,然后在返回时显示错误等。这意味着您无法使用内置函数,并且您正在毫无理由地有效地重写代码。请详细说明。如果我使用这个方法,我会在我的控制器上得到未定义的方法“index()。有文档链接吗?@AbhishekSaini您必须首先在控制器中创建index()方法。然后您可以将该方法包含在另一个方法中,确切地说是return$this->index();