Проверка входных параметров по модели, привязанной к маршруту - PullRequest
0 голосов
/ 02 июля 2019

У меня небольшой вопрос по поводу валидации.существует маршрут API POST /api/document/{document}/link, он принимает массив идентификаторов документов ({"ids": [1, 2, 3]}), которые должны быть связаны с документом, связанным с маршрутом.Я проверяю этот массив следующим образом

public function rules()
    {
        return [
            'ids' => 'required|array',
            'ids.*' => 'numeric|exists:documents,id'
        ];
    }

Дело в том, что модель документа имеет атрибут partner, и невозможно связать вместе документы от разных партнеров.Я хочу проверить, принадлежат ли переданные документы (по их идентификаторам) тому же партнеру, что и связанный документ.Я хотел бы проверить это в FormRequest.Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

Итак, вот что я закончил:

public function rules()
    {
        /** @var Document $document */
        $document = $this->route('document');

        return [
            'ids' => ['required', 'array'],
            'ids.*' => ['required', 'numeric', Rule::exists('documents','id')->where('partner_id', $document->partner_id)],
        ];
    }

Как оказалось, случай описан в документации Laravel здесь https://laravel.com/docs/5.8/validation#rule-exists. Мне просто нужно было настроить запрос, чтобы убедиться, чточто оба пропущенных id и partner_id существуют.

0 голосов
/ 02 июля 2019

Вы можете использовать их для своих правил:

'ids' => [
    'required',
    'array'
],
'ids.*' => [
    'required',
    'exists:documents,id'

],
'ids.*.partner_id' => [
    Rule::in([$document->partner_id])
]

это будет проверять совпадение вашего идентификатора с числами в массиве, так как мы помещаем туда только идентификатор из маршрута, указанного $document, он долженсовпадение или возврат не выполнен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...