При обновлении строки, как мне проверить, что существующая строка содержит значение с запросами формы Laravel?

В Laravel 5, используя запрос формы, чтобы действовать в качестве шлюза проверки, и учитывая код ниже:

контроллер

public function decline(Request $request, InviteDeclineRequest $validation, $id)
{
$invite = Invite::find($id);
$invite->status = 'declined';
$invite->save();
}

СформироватьЗапрос

class InviteDeclineRequest extends Request {

public function rules()
{
return [
# this is referring to the incoming data,
# not the existing data
'status': 'pending',
];
}

}

Как я могу изменить вышеуказанный набор правил проверки, чтобы сказать, что входящий вход действителен, только если статус существующей записи установлен на «в ожидании». Т.е. нельзя разрешить отклоненное приглашение, если существующее не ожидает рассмотрения.

Опция 1:
Поместите эту логику в контроллер. Возможно, вышеупомянутое не считается частью проверки (хотя я бы сказал, что это так), и поэтому не относится к FormRequest.

Вариант 2:
Поместите логику в метод Authorize метода FormRequest. Единственным недостатком этого является то, что авторизация должна быть для контроля доступа, а не для проверки данных.

Вариант 3:
Расширьте запрос формы, чтобы включить третий метод, который проверяет существующие данные, а также входящие данные. Немного больно, так как мне нужно убедиться, что он вызывается как часть цикла запроса.

Вариант 4:
Добавьте пользовательское правило проверки:
http://laravel.com/docs/5.0/validation#custom-validation-rules

0

Решение

Вы можете добавить к своему заказу InviteDeclineRequest метод класса all добавить id к данным, которые будут проверены:

public function all()
{
$data = parent::all();
$segments = $this->segments();
$id = intval(end($segments));
if ($id != 0) {
$data['id'] = $id;
}
return $data;
}

а теперь в rules Вы можете использовать это:

public function rules()
{
return [
'id' => ['required', 'exists:invites,id,status,pending']
];
}

чтобы убедиться, что редактируемая вами запись имеет статус pending,

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]