fix rules

This commit is contained in:
2023-05-09 10:07:59 +10:00
parent 6d534bd1c3
commit a468ae01ff

View File

@@ -4,7 +4,9 @@ namespace App\Http\Requests;
use App\Rules\RequiredIfAny; use App\Rules\RequiredIfAny;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Validation\Rules\RequiredIf;
use App\Rules\Uniqueish; use App\Rules\Uniqueish;
use Illuminate\Support\Arr;
class UserRequest extends BaseRequest class UserRequest extends BaseRequest
{ {
@@ -44,16 +46,45 @@ class UserRequest extends BaseRequest
$ruleUser = $this->route('user'); $ruleUser = $this->route('user');
$isAdminUser = $user->hasPermission('admin/users'); $isAdminUser = $user->hasPermission('admin/users');
$requiredIfFieldsPresent = function (array $fields) use ($ruleUser): RequiredIf {
return new RequiredIf(function () use ($fields, $ruleUser) {
$input = $this->all();
$values = Arr::only($input, $fields);
foreach ($values as $key => $value) {
if ($value !== null && $value !== '') {
return true;
}
}
$fields = array_diff($fields, array_keys($values));
foreach ($fields as $field) {
if ($ruleUser->$field !== '') {
return true;
}
}
return false;
});
};
return [ return [
'first_name' => [ 'first_name' => [
// $isAdminUser === true ? 'required_with:last_name,display_name,phone' : 'required', 'sometimes',
$isAdminUser === true ? $requiredIfFieldsPresent(['last_name', 'display_name', 'phone']) : 'required',
'string',
'between:2,255',
],
'last_name' => [
'sometimes',
$isAdminUser === true ? $requiredIfFieldsPresent(['first_name', 'last_name', 'phone']) : 'required',
'string', 'string',
'between:2,255', 'between:2,255',
], ],
// 'last_name' => $isAdminUser === true ? 'required_with:first_name,display_name,phone|string|between:2,255' : 'required|string|between:2,255',
'last_name' => 'string|between:2,255',
'display_name' => [ 'display_name' => [
// $isAdminUser === true ? 'required_with:first_name,last_name,phone' : 'required', 'sometimes',
$isAdminUser === true ? $requiredIfFieldsPresent(['first_name', 'display_name', 'phone']) : 'required',
'string', 'string',
'between:2,255', 'between:2,255',
(new Uniqueish('users', 'display_name'))->ignore($ruleUser->id) (new Uniqueish('users', 'display_name'))->ignore($ruleUser->id)