Я сделал этот пользовательский класс проверки, CustomValidator.php
:
<?php
namespace App;
use Illuminate\Validation\Validator;
class CustomValidator extends Validator{
public function validateRequiredWithOneOf($attribute, $value, $parameters)
{
$data = $this->getData();
foreach ($parameters as $p) {
if ( array_get($data,$p) != null) {return true;}
}
return false;
}
public function replaceRequiredWithOneOf($message, $attribute, $rule, $parameters)
{
return $this->replaceRequiredWith($message, $attribute, $rule, $parameters);
}
}
который я называю в моем CustomRequest.php
'input_field' => 'required_with_one_of:first,second,third',
Если атрибут input_field
затем выбирается хотя бы одно из полей параметров (first
,second
,third
) должен быть выбран также.
Если я определю пользовательскую проверку внутри boot()
метод AppServiceProvider.php
все работает, но только если я создаю этот класс CustomValidator и удаляю код из AppServiceProvider.php
,
Это меня не удивляет, так как я звоню Validator
и не CustomValidator
в моем CustomRequest
учебный класс.
мой CustomRequest
класс расширяется Request
класс, который расширяется FormRequest
класс, в котором Validator
упоминается во многих местах. Я действительно не знаю, с чего начать.
При необходимости я могу с / п FormRequest
класс здесь.
Кто-нибудь может помочь мне разобраться с этим?
После создания CustomValidator
просто позвони resolver
метод в boot()
метод:
\Validator::resolver(function($translator, $data, $rules, $messages)
{
return new CustomValidator($translator, $data, $rules, $messages);
});
Кроме того, называя это внутри CustomRequest
не делает различий. Должно работать без проблем.
Других решений пока нет …