【发布时间】:2015-08-06 23:55:07
【问题描述】:
我太新手了,不知道如何正确追踪这个问题,所以希望这里有人可以帮助我。
验证器不再在我的 Laravel 5 应用程序中工作。它不会捕获错误。一切都会过去。我已经缩小了我的代码范围,以便在提交表单时在验证器上做一个简单的模具和转储,如下所示:
public function postRegister(Request $request){
$validator = $this->registrar->validator( $request->all() );
dd($validator);
}
Registrar 验证器方法是:
public function validator( array $data )
{
return Validator::make( $data, [
'username' => array('required, regex:/^[a-zA-Z0-9\-\s]+$/, max:20'),
'email' => 'required|email|max:255|unique:users',
'password' => 'required|confirmed|min:6',
'honeyfield' => 'size:0',
'unhuman' => 'boolean:0',
'honeytime' => 'honeytimer:7'
] );
}
(“honeytimer”是使用验证器服务提供商设置的自定义验证)。
现在,如果我提交一个错误填写的表单,我会返回一个包含所有已定义规则的 Validator 对象,但会返回一个空的 #failedRules 数组,如果我死掉并转储 $request,则不会出现错误包。
如果我死了并转储 $validtor->fails(),它返回 true,但是当我尝试使用 $validator->failed() 检索数组时,它是空的。
进一步详细说明(特别感谢@shaddy 帮助清除此问题)常规方法(如下)首先检查验证是否失败,但它似乎没有注册它,因为它只是继续,并尝试创建用户。
public function postRegister( Request $request )
{
$validator = $this->registrar->validator( $request->all() );
if( $validator->fails() ) {
$this->throwValidationException(
$request, $validator
);
}
$this->auth->login( $this->registrar->create( $request->all() ) );
\Session::flash( 'new_registration', true );
return redirect()->intended( '/' );
}
首次实施时一切正常。因此,很明显,我在过去几天对应用程序的其他部分进行了一些更改,导致了这种情况。当然,我已经测试了我能想到的所有东西(就我所做的更改而言),但似乎没有任何改变。
这可能与加载类的顺序有关吗?我在这里想念什么?我敢肯定这是显而易见的,但我真的可以使用一些建议。提前致谢。
【问题讨论】:
-
看我的回答here
-
谢谢@shaddy,但我想弄清楚为什么验证器一开始就不起作用。我知道表单请求,但这只是管理验证的另一种方式。它不能解决验证器不工作的问题(这与您提到的问题中的问题不同)。不过,我很欣赏您的意见。再次感谢。 :-)
标签: validation laravel laravel-5