环境
拉- 拉维尔版本:6.1.0
- PHP 版本: 7.3.10
描述:
我有一个自定义的Laravel身份验证,其中包括不同的字段名称。我的密码字段是大写 P 的密码。 我有以下断言:
$this->assertFalse(session()->hasOldInput('Password'));
以下转储显示输入的密码。
dd(session()->getOldInput('Password');
看起来验证者不知道从返回中省略新密码字段。 我可以在控制器中做到这一点
... ->withInput($request->only(['FirstName', 'LastName', 'Email']))
但这对验证器不起作用。
我深入研究了这些文件:
vendor/laravel/framework/src/Illuminate/Validation/Validator.php vendor/laravel/framework/src/Illuminate/Validation/ValidationException.php
但是他们没有提到密码。任何线索验证器在哪里过滤请求或如何向其添加自定义过滤器?
此外,这些是我的控制器中的规则:
return Validator::make($data, [
'FirstName' => ['required', 'string', 'max:255'],
'LastName' => ['required', 'string', 'max:255'],
'Email' => ['required', 'string', 'email', 'max:255'],
'Password' => ['required', 'string', 'min:6', 'confirmed'],
]);
如果我在全新安装或将字段名称作为"密码"的 laravel 上运行我的测试,它可以工作。
将自定义字段名称添加到appExceptionsHandler.php
中的$dontFlash
数组
protected $dontFlash = [
'Password',
'Password_confirmation',
];
https://github.com/laravel/laravel/blob/master/app/Exceptions/Handler.php