1. Это было бы довольно просто, если вы могли бы получить доступ к $ это [данных] от валидатора Laravel, но если вы используете только Validator :: продлить для пользовательского правила, я не верю тебе Можно. Вы также не сможете получить доступ к другим правилам проверки из своего правила, что может пригодиться здесь. Поэтому самым чистым, вероятно, будет расширение класса валидатора.
class CustomValidator extends Illuminate\Validation\Validator {
public function validateIfInVendorArray($attribute, $value, $parameters)
{
$other = $parameters[0];
$vendor = $this->data[$other];
//populate your array from your service call, then check if present
$vendorArray = your service call or wherever you have it;
//if in array, return the result of the Validator's validateRequired method, which we can access since it's protected in Validator
if (in_array($vendor,$vendorArray))
return $this->validateRequired($attribute,$value);
//if it wasn't in the array, return true to pass validation even if it doesn't exist
return true;
}
}
Только не забудьте также register your custom validator resolver
Чтобы использовать правило, которое вы просто передать имя атрибута поля продавцов в качестве параметра.
2. Я думаю, это зависит от того, где требуется ваш массив, и как часто.
Если это требуется только для этой проверки, я бы сделал это в вашем пользовательском правиле проверки, чтобы избежать наложения большего количества работы на контроллер.
Лично я бы переместил правила проверки в пользовательский класс проверки, а затем вы могли бы иметь массив поставщика как поле этого настраиваемого валидатора. Таким образом, этот пользовательский класс валидатора будет служить сервисом для вашего контроллера, см. Пример https://tutsplus.com/lesson/validation-services/.
Я не испытал ни одного из этого сам, но я считаю, что он должен работать! Извините, если это не самое элегантное решение.
Hi @pfrendly: Я следую вашему предложенному решению. Это хорошо, но стоит перед одной проблемой. Fox, если я использую его как: 'field_name' => 'required | if_in_vendor_array: vendor_field' Он работает, но 'field_name' => 'if_in_vendor_array: vendor_field' не работает ... что может быть причиной ? – dirtyhandsphp