CodeIgniter加载视图


CodeIgniter loading a view

控制器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表单验证的详细解释,请参阅我的回复:

重定向应该如何工作