控制器User
中的一个函数加载注册表单,例如:
public function signup()
{
$this->load->view('form_view');
}
注册表单url是root/user/signup
(ignore index。php)
form_view
有一个表单,它被提交给同一个控制器中的另一个方法,比如process()
,例如
<? echo form_open('user/process') ?>
表单提交后,将转到包含验证代码的user/process
。如果有任何验证错误,它将再次加载form_view
并传递错误数据以显示在表单上。
if ( $this -> form_validation -> run() === FALSE )
{
//$this -> load -> vars( $data );
$this -> load -> view( 'form_view' );
}
一切正常。但是现在,由于同样的form_view
是从user/process
函数加载的,所以表单的url将从:
root/user/signup
root/user/process
因为表单被提交到url user/process
,而form_view
是从process()
调用的。是否有可能以某种方式重定向或维护原始表单url(root/user/signup
)时,form_view
从进程函数加载在错误的情况下?
谢谢。
使用与for和验证相同的方法,您可以尝试如下内容
if( count($this->input->post()) > 0 )
{ // do validation
if ($this->form_validation->run())
{
// initilize and
redirect('logged');
}
}
$this->load->view( 'form_view' );
你总是得到相同的方法,当你问
我用了另一种方法。我实际上用一个控制器来做所有这些。
if ( $this -> form_validation -> run() === TRUE )
{
code
code
redirect('ANOTHER_URL_WITH_VALIDATION_CODE_DISPLAY');
}
$this -> load -> view( 'form_view' );
对不起,我的意思是说一个控制器而不是一个方法。如果您只是在寻找表单验证,那么将其全部放入一个控制器中。让CI的内置form_validation函数为您执行验证。如果你需要后端验证(即用户名检查),你可以创建一个自定义的验证规则,称为"回调",并让表单验证。
理想情况下,你的控制器将检查所有字段,如果它通过,它应该重定向到下一个页面,其中包含任何你想要显示的信息。"感谢您的注册!")。如果检查失败,它应该再次加载视图页面;显然,您需要重新填充字段。
关于如何/为什么调用Codeigniter表单验证的详细解释,请参阅我的回复:
重定向应该如何工作