我正在使用Codeigniter的验证类来验证我的表单。如果发现任何验证错误,您能否告诉我如何从控制器重定向到上一页?
在我的控制器中:
if ($this->form_validation->run() == FALSE){
//**** Here is where I need to redirect
} else {
// code to send data to model...
}
答案 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)
嗯,通常你应该这样做(伪代码):
这意味着你必须留在同一个控制器内。您的代码应该已经在执行此行为,这是预期的行为。
如果您仍然感觉到重定向的冲动,请调用相应的函数:
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']);