Bezdepbonusu7Программирование: статьи и ответы

Вопрос

FormRequest с параметром маршрута (Laravel 5)

Автор вопроса: ZnkОтветов: 1

В настоящее время я изучаю объект FormRequest, чтобы использовать его для аутентификации и проверки входящих данных. Однако я не могу заставить его работать при использовании инъекции модели.

Маршруты.php:

Route::model('post', 'Post');
Route::model('comment', 'Comment');
Route::resource('post', 'PostController');
Route::resource('post.comments', 'CommentController');

Постзапрос:

class StoreCommentRequest extends FormRequest {

    public function authorize()
    {
        $post = $this->route('post');
        $owners = $report->users;

        return $owners->contains(Auth::id());
    }

    public function rules()
    {
        return [
            'post_id' => 'required|numeric|exists:posts,id'
        ];
    }

}

Всякий раз, когда комментарий публикуется, я получаю сообщение:

"The post id field is required"

Проблема в том, что я не могу "ввести" правильное значение для post_id из модели Post, привязанной к маршруту.

Можно ли использовать параметры маршрута? И если да, то как?

  • внутри функции authorize() выполните dd(\Input::all()); и проверьте значение идентификатора погоды. manix 17.02.2015
  • Параметр id не публикуется вместе с данными. Вместо этого я хотел бы получить параметр из маршрута. Znk 17.02.2015
  • попробуйте это: $post = $this->route('post_id'); Кроме того, \Input::all() также должен иметь значения из маршрута manix 17.02.2015
  • Является ли post_id параметром URL, определенным в routes.php, или это что-то, отправленное формой? edcs 02.06.2015

laravel-5routing

Ответы

Ответ 1 · edcs

Вам не нужно проверять идентификатор такого ресурса - вы должны убедиться, что ресурс правильный на уровне контроллера, и сохранить правила проверки для данных формы. Итак, обработчик в вашем контроллере должен выглядеть так:

public function store(StoreCommentRequest $request, Post $posts)
{
    $post = $posts->findOrFail($request->post_id);

    // Do some more stuff here
}

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы