我目前正在努力对注册表单进行一些验证。
基本上,当用户注册时,它会检查他们输入的唯一代码是否有效,如果没有,则不会让他们注册。
但是在我的代码表中,我从代码中读取的代码也有一个到期日。
在认为有效期限没有过期后我需要再做一次检查,换句话说,它不会比现在更长。
我认为你可以在验证器中做到这一点,但我在语法上有点挣扎,不知道它应该去哪里。这是我的代码:
protected function validator(array $data)
{
return Validator::make($data, [
'code' => 'required|exists:codes',
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'date_of_birth' => 'required|date',
'password' => 'required|min:6|confirmed',
'accept_terms' => 'required|accepted',
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return User
*/
protected function create(array $data)
{
Code::where('code', $data['code'])->increment('uses');
$data['code_id'] = Code::where('code', $data['code'])->value('id');
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'date_of_birth' => $data['date_of_birth'],
'accept_terms' => $data['accept_terms'],
'code' => $data['code'],
'code_id' => $data['code_id'],
'password' => bcrypt($data['password']),
]);
}
提前致谢:)
答案 0 :(得分:3)
只要您使用Laravel v5.3.18(或更高版本),就可以使用Rule
类来保存您必须定义的自定义规则。
此:
'code' => 'required|exists:codes',
可替换为:
'code' => [
'required',
Rule::exists('codes')->where(function ($query) {
$query->where('expiry_date', '>=', Carbon::now());
}),
],
(以上假设expiry_date
是db表中列的实际名称。)
文档:https://laravel.com/docs/5.3/validation#rule-exists
请确保您导入这些外墙。
希望这有帮助!
答案 1 :(得分:2)
你可以create custom validation rule。创建服务提供商并注册它。然后添加如下内容:
Validator::extend('is_code_valid', function($attribute, $value, $parameters, $validator) {
$code = Code::where('code', $value)->where('date', '>', Carbon::now())->first();
return !$code->isEmpty(); // Pass if valid code exists in DB.
});
然后使用它:
'code' => 'required|is_code_valid',