@vrazbros

Как в Laravel проверить параметры реквеста?

Привет

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

Роут:
Route::prefix('group')->group(function () {
      Route::delete('{user_id}/user', 'UserLessonGroupController@removeUserFromGroup');        
});

Реквест
class UserRequest extends FormRequest
{
    public function rules(): array
    {
        return [
            'user_id' => ['int', 'required'],
        ];
    }
}

Контролер
public function removeUser(UserRequest $request): SuccessResponse
{
    echo "tets";
}


url test.lcom/group/12/user
запрос отправляется http методом delete

выдает ошибку: user_id field is required я так понимаю это не проходят правила валидации реквеста,
Почему валидатор реквеста не видит user_id значение для которого отправляются в урле?
  • Вопрос задан
  • 241 просмотр
Пригласить эксперта
Ответы на вопрос 2
@Kostik_1993
Web Developer
UserRequest это ваш класс наследуемый от FormRequest, ключевое слово тут Form - это значит что вы проверяете то, что было отправлено с формы.

Что касается вашего случая, тут применяется метод findOrFail, данный метод это тотже самый метод find(), но только в случае если такой записи нет в таблице будет возвращена ошибка 404
public function removeUser($userId)
{
       $user = User::findOrFail($userId);
       $user->delete();
}
Ответ написан
Комментировать
Alex_Wells
@Alex_Wells
PHP/Kotlin
Потому что так работает FormRequest. Можете добавить это в базовый форм реквест, если вам это нужно:

/**
	 * {@inheritdoc}
	 */
	public function validationData(): array
	{
		return array_merge(
			$this->all(),
			$this->routeParameters()
		);
	}

	/**
	 * Get route parameters for this request and wrap them into {} each.
	 *
	 * @return array
	 */
	protected function routeParameters(): array
	{
		return collect($this->route()->parameters)
			->mapWithKeys(static function ($item, $key) {
				return ['{'.$key.'}' => $item];
			})
			->toArray();
	}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы