我太过于想弄清楚如何正确追踪这一点,所以希望有人可以帮助我。
验证器不再适用于我的Laravel 5应用程序。它没有发现错误。一切都过去了。我缩小了我的代码,以便我做一个简单的模具并在表单提交时转储验证器,如下所示:
public function postRegister(Request $request){
$validator = $this->registrar->validator( $request->all() );
dd($validator);
}
注册商验证方法是:
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服务提供商设置的自定义验证)。
现在,如果我提交一个填错的表单,我会返回一个Validator对象,其中定义了所有规则,但是一个空的#failedRules数组,如果我死了并转储$ request,则没有错误包。< / p>
如果我死了并转储$ validtor-&gt; failed(),它返回true,但是当我尝试使用$ validator-&gt; 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( '/' );
}
首次实施时,一切正常。所以,显然我在过去几天里对应用程序的其他部分做了一些改变。当然,我已经测试了我能想到的一切(根据我所做的改变),但似乎没有任何差别。
这是否与加载类的顺序有关?我在这里错过了什么?我确信这是显而易见的,但我真的可以使用一些建议。提前谢谢。
答案 0 :(得分:1)
你应该有像
这样的东西array('required', 'regex:...')
而不是
array('required, regex...')
没有任何意义。每个验证规则应该由管道分隔,或者是数组中的单个列。
答案 1 :(得分:0)
失败的数组为空,因为您只是创建验证器的新实例。您实际上并未触发验证。
所以你可以这样做来触发验证并检查它是否失败:
public function postRegister(Request $request){
$validator = $this->registrar->validator( $request->all() );
dd($validator->fails());
}
您也可以在没有消息的情况下访问失败的验证规则数组。为此,请使用失败的方法:
$failed = $validator->failed();
您可以在documentation中查看更多示例。
修改强>:
现在,在我看到整个代码后,我可以说你需要处理有错误的情况:
public function postRegister( Request $request )
{
$validator = $this->registrar->validator( $request->all() );
if( $validator->fails() ) {
// Validator fails, return to the previous page with the errors
return Redirect::back()->withInput()->withErrors( $validator );
}
$this->auth->login( $this->registrar->create( $request->all() ) );
\Session::flash( 'new_registration', true );
return redirect()->intended( '/' );
}
答案 2 :(得分:0)
验证后,您需要捕获验证错误消息
if ($validator->fails()):
return $validator->messages()->first();
答案 3 :(得分:0)
感谢大家的帮助!对于将来遇到这种情况的任何人来说,事实证明将正则表达式规则放在一个数组中,正如Laravel 5文档中所建议的那样(虽然不是必需的):http://laravel.com/docs/5.0/validation#rule-regex,在我的情况下是罪魁祸首。将其更改回管道分隔符解决了这个问题。
所以,改变:
'username' => array('required, regex:/^[a-zA-Z0-9\-\s]+$/, max:20')
为...
'username' => 'required|regex:/^[a-zA-Z0-9\-\s]+$/|max:20'
...导致验证正常工作。当然,我可能没有正确设置阵列。如果是这种情况,则表示赞赏。无论哪种方式,管道划界都可以解决问题。
修改强>
@ Codel96在他们的回答中钉了这个。我没有在第一时间正确设置阵列。