【问题标题】:CodeIgniter loading a viewCodeIgniter 加载视图
【发布时间】:2011-10-07 14:38:01
【问题描述】:

控制器User中的一个函数加载注册表单,例如:

public function signup()
    {
        $this->load->view('form_view'); 
    }

所以注册表单的 url 会像 root/user/signup(忽略 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' );   

}

一切正常。但是现在由于从user/process函数加载了相同的form_view,所以表单的url将从:

root/user/signup

root/user/process 

因为表单已提交到 URL user/process,而 form_view 是从 process() 调用的。当form_view从进程函数加载时,是否可以以某种方式重定向或维护原始表单url(root/user/signup)以防出错?

谢谢。

【问题讨论】:

标签: php model-view-controller codeigniter views


【解决方案1】:

我以不同的方式做到了这一点。我实际上有一个控制器来完成这一切。

if ( $this -> form_validation -> run() === TRUE )
{
    code
    code
    redirect('ANOTHER_URL_WITH_VALIDATION_CODE_DISPLAY');        
}

$this -> load -> view( 'form_view' ); 

很抱歉,我的意思是说一个控制器而不是一种方法。如果您只是在寻找表单验证,那么将其全部放入一个控制器中。让 CI 的内置 form_validation 函数为您进行验证。如果您需要后端验证(即用户名检查),您可以创建一个名为“callback”的自定义验证规则,并让表单也对其进行验证。

理想情况下,您的控制器将检查所有字段,如果通过,它应该重定向到带有您想要显示的任何信息的下一页(即“感谢您注册!”)。如果检查失败,则应重新加载视图页面;您显然需要重新填充这些字段。

【讨论】:

  • 我认为这只是一个评论。
  • @luckytaxi 你能提供更多信息吗?您的意思是我应该只使用一个控制器函数来加载默认表单并使用相同的函数来加载带有验证错误的函数吗?你能举一些你是怎么做的例子吗?谢谢。
  • @Roman,请参阅尼克的评论。它正是您正在寻找的。​​span>
【解决方案2】:

使用与 for 和验证相同的方法,您可以尝试类似的方法

if( count($this->input->post()) > 0 ) 
{ // do validation
   if ($this->form_validation->run())
   {
       // initilize and    
       redirect('logged');
   }
}
$this->load->view( 'form_view' );

你总是得到同样的方法,就像你问的那样

【讨论】:

  • 谢谢。只是想知道为什么count($this-&gt;input-&gt;post()) &gt; 0,这也可以吗? if( $this-&gt;input-&gt;post() ) ?
  • 是的,你是对的。如果 POST 中没有项目,该函数将返回 FALSE(布尔值)。您还可以检查其中一个字段是否存在,假设 $this->input->post('username') 具有相同的结果。
【解决方案3】:

有关如何/为什么调用 Codeigniter 表单验证的详细说明,请参阅我的回复:

Question about how redirects should work

【讨论】:

    猜你喜欢
    • 2014-10-18
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多