【发布时间】:2017-05-18 13:51:30
【问题描述】:
我有两个字段。 author_id 和 teacher_id。我希望一个或另一个是必需的,但如果两者都被填满,它会显示一条错误消息“只能有一个”。
是否可以使用 Laravel 中的验证规则来做到这一点?我不明白文档。也许一个例子会更有意义(和解释)
【问题讨论】:
标签: laravel
我有两个字段。 author_id 和 teacher_id。我希望一个或另一个是必需的,但如果两者都被填满,它会显示一条错误消息“只能有一个”。
是否可以使用 Laravel 中的验证规则来做到这一点?我不明白文档。也许一个例子会更有意义(和解释)
【问题讨论】:
标签: laravel
有时最好使用自定义后验证钩子,例如:
/**
* @return \Illuminate\Validation\Validator
*/
public function validator(): \Illuminate\Validation\Validator
{
$validator = Validator::make($this->all(), [
'file' => 'required_without:url|file',
'url' => 'required_without:file|url'
]);
if ($this->has('url') && $this->has('file')) {
$validator->after(function (\Illuminate\Validation\Validator $validator) {
$validator->errors()->add('url', 'error message');
});
}
return $validator;
}
【讨论】:
你应该使用required_without:foo,bar,... 见here
示例
'author_id' => 'required_without:teacher_id',
'teacher_id' => 'required_without:author_id',
【讨论】:
这里提到了 2 种不同的方法来进行条件验证 例如如果 deviceType 是“android”,则需要登录功能 fcmToken
公共功能登录(请求 $request){
// 如果 deviceType 存在且 android 则需要验证 fcmTokenif($request->has('deviceType') && $request['deviceType'] == "android") {
$请求->验证([ 'fcmToken' => '必需',
);
} }
使用 Illuminate\Foundation\Http\FormRequest;
类 LoginRequest 扩展 FormRequest { 公共函数授权() { 返回真; }public function rules() { return [ 'email' => 'required|string', 'password' => 'required', 'fcmToken' => 'string', 'deviceType' => 'required|string' ]; } }
【讨论】: