Codeigniter表单验证:如果发现任何验证错误,如何重定向到上一页?

时间:2011-10-28 18:26:48

标签: codeigniter codeigniter-2

我正在使用Codeigniter的验证类来验证我的表单。如果发现任何验证错误,您能否告诉我如何从控制器重定向到上一页?

在我的控制器中:

if ($this->form_validation->run() == FALSE){

  //**** Here is where I need to redirect  

} else  {
     // code to send data to model...           

  }                             

4 个答案:

答案 0 :(得分:11)

我为此扩展了URL帮助程序。

https://github.com/jonathanazulay/CodeIgniter-extensions/blob/master/MY_url_helper.php

在您的控制器中:

$this->load->helper('url');
redirect_back();

只需将MY_url_helper.php放入application/helpers,您就可以了。

答案 1 :(得分:5)

<强>更新

您希望发布表单,对其进行验证,然后在验证失败时再次显示验证错误,或者在验证通过时显示完全不同的内容。

执行此操作的最佳方法是将表单发布回自身。因此,表单的操作将为action=""。这样,在您的方法中,您可以检查表单是否已提交,并确定该做什么:

// in my form method
if ($this->input->post('submit')) // make sure your submit button has a value of submit
{
     // the form was submitted, so validate it
     if ($this->form_validation->run() == FALSE)
     {
         $this->load->view('myform');
 }
 else
 {
         $this->load->view('formsuccess');
 }
}
else
{
    // the form wasn't submitted, so we need to see the form
    $this->load->view('myform');
}

OLD ANSWER

您始终可以使用以下格式在隐藏字段中传递当前URI:

<input name="redirect" type="hidden" value="<?= $this->uri->uri_string() ?>" />

如果验证失败,则重定向:

redirect($this->input->post('redirect'));

或者您可以在flashdata会话变量中设置重定向网址:

// in the method that displays the form
$this->session->set_flashdata('redirect', $this->uri->uri_string());

如果验证失败,则重定向:

redirect($this->session->flashdata('redirect'));

答案 2 :(得分:0)

嗯,通常你应该这样做(伪代码):

  • if form_validation == false - &gt;表单尚未提交或验证失败 - &gt;加载表单视图;
  • if form_validation == true - &gt;做处理。

这意味着你必须留在同一个控制器内。您的代码应该已经在执行此行为,这是预期的行为。

如果您仍然感觉到重定向的冲动,请调用相应的函数:

redirect('updatebatch/get/40','refresh');
// assuming 'updatebatch' is the name of your controller, and 'sundial' just a folder

答案 3 :(得分:0)

我在库中创建了一个函数,以便在需要时创建重定向。

<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');

class Functions {

public function generateRedirectURL()
{
$CI =& get_instance();
$preURL = parse_url($_SERVER['REQUEST_URI']);
$redirectUrl = array('redirectUrl' => 'http://' . $_SERVER['SERVER_NAME'] . $preURL['path']);
$CI->session->set_userdata($redirectUrl);
}

}

//End of the file

当您想要创建重定向到该页面时,只需写入函数:

$this->load->library('functions'); //you can put it in the autoloader config
$this->functions->generateRedirectURL();

然后你只需要打电话:

redirect($this->session->userdata['redirectUrl']);