Проверка Laravel: правила в required_if - PullRequest
0 голосов
/ 17 октября 2018

У меня есть список выбора, где первая опция отключена, поэтому, когда пользователь не выбирает допустимую опцию, результат списка выбора не будет в запросе.

В проверке, обязательное поле, если значение другого поля, например: 1, in case not 1, the field is not required.

Код:

'city_id' => [
'required',
'integer',
Rule::in(City::availableCities()),
],
'district_id' => new DistrictValidation(request('city_id')),

Как я могу это сделать, district_id броситьпроверка каждый раз, независимо от того, находится она в запросе или нет.

Спасибо за ответы,

Обновление: возможно, вы ясно видите, если здесь есть правило DistrictValidation:

class DistrictValidation implements Rule
{
    protected $city;
    private $messages;

    /**
     * Create a new rule instance.
     *
     * @param $cityId
     */
    public function __construct($cityId)
    {
        $this->city = City::find($cityId);
    }

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        dd('here');
        if (!$this->city) {
            return false;
        }

        if (!$this->city->hasDistrict) {
            return true;
        }

        $validator = Validator::make([$attribute => $value], [
            $attribute => [
                'required',
                'integer',
                Rule::in(District::availableDistricts()),
            ]
        ]);

        $this->messages = $validator->messages();

        return $validator->passes();
    }
    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
       return optional($this->messages)->first('district_id');
    }
}

Ответы [ 4 ]

0 голосов
/ 17 октября 2018

Вы можете использовать required_if условие, определенное при проверке Laravel. Вот ссылка на надлежащий документ Laravel Validation

Validator::make($data, [
    'city_id' => [
        'required',
        'integer',
        Rule::in(City::availableCities()),
    ],
    'district_id'=>[
         'required_with:city_id,',
    ]
]);
0 голосов
/ 17 октября 2018

попробуйте это:

$myValidations = [
    "city_id" => [
        "required",
        "integer"
    ]
]

// if city_id exists in availableCities so add some rules 
if(collect(city::availableCities)->contains(request("city_id"))){
    $myValidations["district_id"] = new DistrictValidation(request('city_id'))
}

// validate request fields with $myValidations variable
0 голосов
/ 17 октября 2018

попробуйте использовать проверку required_if, когда проверяемое поле должно присутствовать и не быть пустым, если поле другого поля равно какому-либо значению.

required_if:field,value,...

используйте его следующим образом:

$request->validate([ 'city_id' => 'required|integer|Rule::in(City::availableCities())', 'district_id' => 'required_if:city_id,1', ]);

попробуйте прочитать дополнительную информацию о проверке laravel здесь

0 голосов
/ 17 октября 2018

Попробуйте это:

'city_id' => [
  'nullable',
  'numeric',
  Rule::in(City::availableCities())
],
'district_id' => new DistrictValidation(request('city_id')),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...