Html 如何使用控制器和视图在codeigniter4中应用表单验证?

Html 如何使用控制器和视图在codeigniter4中应用表单验证?,html,css,codeigniter-4,Html,Css,Codeigniter 4,这里定义了带有表单验证和查看文件的codeigniter4控制器。如何在有错误的查看页面上反映。 控制器代码未反映在视图页面上。有人能澄清codeigniter4验证的问题吗 控制器 public function register_user(){ helper(['form', 'url']); $this->validation = \Config\Services::validation(); $validation = $this->validati

这里定义了带有表单验证和查看文件的codeigniter4控制器。如何在有错误的查看页面上反映。 控制器代码未反映在视图页面上。有人能澄清codeigniter4验证的问题吗

控制器

public function register_user(){
    helper(['form', 'url']);
    $this->validation =  \Config\Services::validation();
    $validation = $this->validation;
    $rules = [
      'user_name' => [
          'required' => 'All accounts must have usernames provided',
      ],
    ];

    $this->validation->setRules([
            'user_name' => 'required|min_length[2]',
        ],
        $rules
    );

    if (! $this->validate($rules))
    {
      $validationErrors = $this->validation->getErrors();
      return redirect()->back()->withInput()->with('errors', $validationErrors);
    }
}
看法


登录注册
.错误{颜色:红色;}
请在这里登记

你可以试试这个控制器

public function register_user(){
            helper('form');
            if (! $this->validate([
            'user_name' => 'required|min_length[3]|max_length[255]'
            ]))
            {
                echo view('user/login');
            }
            else{
                echo view('user/login_view');
            }
        }
这种观点:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Login Registration</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" media="screen" title="no title">
  </head>
<body>
<h2></h2>
 <style type="text/css">
 .error{color: red;}


</style>
<span style="background-color:red;">
  <div class="container">
      <div class="row">
          <div class="col-md-4 col-md-offset-4">
              <div class="login-panel panel panel-success">
                  <div class="panel-heading">
                      <h3 class="panel-title">Please do Registration here</h3>
                  </div>
                  <div class="panel-body">

                      <form role="form" method="post" action="<?php echo base_url('user/register_user'); ?>">
                          <fieldset>
                              <div class="form-group">
                              <?= esc($user_name); ?>
                              <span class="error"><?= \Config\Services::validation()->listErrors(); ?></span>
                                  <input class="form-control" placeholder="Please enter Name" name="user_name" type="text" autofocus>

                              </div>

                              <input class="btn btn-lg btn-success btn-block" type="submit" value="Register" name="register" >

                          </fieldset>
                      </form>
                      <center><b>You have Already registered ?</b> <br></b><a href="<?php echo base_url('user/login_view'); ?>"> Please Login</a></center>
                  </div>
              </div>
          </div>
      </div>
  </div>
</span>
</body>
</html>

这篇帖子没有经过验证,但是万迪老虎的回复对我来说是可以的

有了几个规则,您可以简单地执行以下操作:

$validation = $this->validate([
    'user_name' => 'required|min_length[10]|max_length[255]',
    'user_pass' => 'required|min_length[10]|max_length[255]'
]); 

if($validation)
{
    echo view('user/login');
}
else{
    echo view('user/login_view');
}

//重定向时保留旧的输入值,以便
old()
函数可以使用它们

return redirect()->back()->withInput();
//设置一条闪光消息

return redirect()->back()->with('foo', 'message');
在您的示例中,您已经将这两种方法结合在一起,这是行不通的 因为您试图在视图中访问的变量$validation不包含任何数据,因为您尚未为其分配任何数据

所以你必须更换

使用此代码:

不要更改视图文件中的任何内容

return redirect()->back()->withInput();
return redirect()->back()->with('foo', 'message');
if (! $this->validate($rules))
{
  $validationErrors = $this->validation->getErrors();
  return redirect()->back()->withInput()->with('errors', $validationErrors);
}
 if (! $this->validate($rules))
    {
      $data['validation'] = $this->validatior;
      return view('view-name',$data);    //note don't forget to replace view-name. 
    }