我在登录表单中使用了Codeigniter 4表单验证。此外,验证表单运行良好。当登录页面加载之前,导入的字段也显示错误。在下面,我插入了与登录部分相关的控制器和视图代码。我检查了不同的方法,但我没有找到解决问题的方法。请指导我解决它。
用户控制器:
<?php namespace AppControllers;
use AppModelsUserModel;
class User extends BaseController
{
public function index()
{
echo "User index";
// Load views
// echo view('static/header');
// echo view('front/all');
// echo view('static/footer');
}
public function login()
{
helper('form');
$val = $this->validate([
'username' => 'required',
'password' => 'required',
]);
if (!$val)
{
echo view('front/login', [
'validation' => $this->validator
]);
}
else
{
return redirect()->to('/');
}
}
public function logout()
{
}
public function register()
{
// Load views
echo view('front/register');
}
}
login.php(登录页面视图(:
<body>
<?= ConfigServices::validation()->listErrors(); ?>
<div class="limiter">
<div class="container-login100">
<div class="wrap-login100 p-b-160 p-t-50">
<?php echo form_open(base_url('user/login'),array('class'=>'login100-form validate-form')); ?>
<span class="login100-form-title p-b-43">
Login Form
</span>
<div class="wrap-input100 rs1 validate-input">
<input class="input100" type="text" name="username">
<span class="label-input100">User Name</span>
</div>
<div class="wrap-input100 rs2 validate-input">
<input class="input100" type="password" name="password">
<span class="label-input100">Password</span>
</div>
<div class="container-login100-form-btn">
<button class="login100-form-btn" type="submit">
Login
</button>
</div>
<div class="text-center w-full p-t-23">
<a href="#" class="txt1">
Forget Password?
</a>
</div>
<div class="text-center w-full p-t-23">
<a href="<?php echo base_url('user/register'); ?>" class="txt1">
SignUp
</a>
</div>
</form>
</div>
</div>
</div>
</body>
输出(首次访问登录页面(:localhost/user/login
根据我对你的问题的理解,你总是会出错。您的预期行为是,只有当您发布空的用户名和密码时才会出现错误。
解决方案:发布表单时必须运行验证。
描述在代码中,在显示表单之前,您正在验证数据。它显然是空的。以下是解决方案,使用以下代码更改您的登录功能。(这不是最佳解决方案,但它会澄清你的概念(。
public function login()
{
helper('form');
$val = null;
if($this->request->getMethod() === 'post') {// checking if request is post
$val = $this->validate([
'username' => 'required',
'password' => 'required',
]);
}
if (!$val)
{
echo view('front/login', [
'validation' => $this->validator
]);
}
else
{
return redirect()->to('/');
}
}
这是一个简单的解决方案,用于验证表单并在表单中出错时保留值
控制器
public function form()
{
$validation = ConfigServices::validation();
$validation->setRules([
'email' => 'required',
'password' => 'required',
]);
if($validation->withRequest($this->request)->run())
{
//valid form
}
else
{
return redirect('')->withInput();
}
}
查看
<form method="post" action="<?= base_url('');?>">
<input type="email" name="email" value="<?= old('email') ?>">
<input type="password" name="password" value="<?= old('password') ?>">
<button type="submit" name="submit">Submit</button>
</form>