【发布时间】:2018-06-03 13:40:59
【问题描述】:
是否可以在验证请求文件中使用我的自定义验证规则?
我想使用名为 EmployeeMail 的自定义规则 这是请求文件的代码
class CoachRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
$rules = [];
if ($this->isMethod('post') ) {
$rules = [
'name' => 'required|string',
'email' => 'required|email|employeemail', <<<--- this
'till' => 'required|date_format:H:i|after:from',
];
}
//TODO fix this
//TODO add custom messages for every field
return $rules;
}
}
当我尝试像这样使用它时它给了我一个错误
方法 [validateEmployeemail] 不存在。
自定义规则代码
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class EmployeeMail implements Rule
{
/**
* Create a new rule instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
// If mail is that of an employee and not a student pass it
return preg_match("/@test.nl$/", $value) === 1;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'Email is geen werknemers mail';
}
}
我只能像这样使用这个自定义规则吗?
$items = $request->validate([
'name' => [new FiveCharacters],
]);
【问题讨论】:
-
看来你是用正则表达式验证字符串,同样的逻辑可以通过正则表达式内置验证方法来实现。看看这个。 laravel.com/docs/5.5/validation#rule-regex 无需创建自己的验证规则。
-
如果您想使用验证,请将其传递到数组中。像这样。
'email' => ['required', 'email', new employeemail], -
@RutvijKothari 啊,谢谢,我会改用正则表达式规则,我忘了。也感谢您提到我将如何在请求文件中使用自定义规则
标签: php laravel validation