我正在使用laravel的验证器来创建登录验证,我的登录名有2种类型的用户。一种具有PAR值(客户端),另一种具有PRO值(专业)。如果选中了单选按钮,则将3个字段添加到我的表单中。
当我是客户时,如何从$data
中删除这些字段?
这是我测试过的:
// VERIFICATION OF THE USER'S STATUS
if($data['status'] == 'PAR') {
return Validator::make($data, [
// CLIENT PART
'name' => 'required|string|max:255',
'surname' => 'required|string|max:255',
'email_user' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
'gender' => 'required|string',
'birth' => 'required|date',
'address' => 'required|string|max:255',
'city' => 'required|string|max:255',
'pc' => 'required|numeric|digits_between:4,5',
'status' => 'required|string|max:255',
]);
}
else if($data['status'] == 'PRO') {
return Validator::make($data, [
// PROFESSIONNAL PART
'name' => 'required|string|max:255',
'surname' => 'required|string|max:255',
'email_user' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
'gender' => 'required|string',
'birth' => 'required|date',
'address' => 'required|string|max:255',
'city' => 'required|string|max:255',
'pc' => 'required|numeric|digits_between:4,5',
'status' => 'required|string|max:255',
'phone' => 'required|numeric',
'license' => 'requiredmimes:jpeg,pdf,png',
'urssaf' => 'required|mimes:jpeg,pdf,png'
]);
}
然后,我将对User :: create函数执行相同的操作。 我正在使用JS显示或不显示电话/许可证/ urssaf字段。因此,在我的表单中,它们已经包含并以“”形式发送。
答案 0 :(得分:1)
您可以使用laravel中的[array_except
辅助函数)[https://laravel.com/docs/5.7/helpers#method-array-except]将其删除到某些if
子句中:
$data = array_except($data, ['phone', 'license', 'urssaf']);
但是实际上看起来您需要从验证规则中删除项目,而不是从数据中删除项目。
由于两种情况下的规则几乎相同,因此您可以执行以下操作:
$rules = [
/** Common rules here */
]
if ($data['status'] == 'PRO') {
$rules = array_merge($rules, [
/** Specific rules here */
]
}
return Validator::make($data, $rules);
这将避免您需要重复自己。
如果您还想从$ data中删除字段,也可以使用第一段代码,以避免恶意的用户填写该字段。
答案 1 :(得分:1)
如果您阅读文档,将会发现:
required_if:另一个字段,值,...
如果 otherfield 字段等于任何值,则必须存在正在验证的字段,并且该字段不能为空。
https://laravel.com/docs/5.6/validation#rule-required-if
return Validator::make($data, [
// PROFESSIONNAL PART
'name' => 'required|string|max:255',
'surname' => 'required|string|max:255',
'email_user' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
'gender' => 'required|string',
'birth' => 'required|date',
'address' => 'required|string|max:255',
'city' => 'required|string|max:255',
'pc' => 'required|numeric|digits_between:4,5',
'status' => 'required|string|max:255',
'phone' => 'required_if:status,pro|numeric',
'license' => 'required_if:status,pro|mimes:jpeg,pdf,png',
'urssaf' => 'required_if:status,pro|mimes:jpeg,pdf,png'
]);