Отсутствуют обязательные параметры для маршрута (Laravel 5.8) - PullRequest
1 голос
/ 07 марта 2019

Я пытаюсь воссоздать блочную заявку из старой версии laravel в новой версии (5.8).В старой версии я использовал для форм коллективный laravel, и моя форма редактирования сообщения выглядит следующим образом:

@extends('layouts.app')

@section('content')
    <h1>Edit Post</h1>
    {!! Form::open(['action' => ['PostsController@update', $post->id], 'method' => 'POST', 'enctype' => 'multipart/form-data']) !!}
        <div class="form-group">
            {{Form::label('title', 'Title')}}
            {{Form::text('title', $post->title, ['class' => 'form-control', 'placeholder' => 'Title'])}}
        </div>
        <div class="form-group">
            {{Form::label('body', 'Body')}}
            {{Form::textarea('body', $post->body, ['class' => 'form-control', 'placeholder' => 'Body Text'])}}
        </div>
        {{Form::hidden('_method', 'PUT')}}
        {{Form::submit('Submit', ['class'=>'btn btn-primary'])}}            
    {!! Form::close() !!}
@endsection

Теперь я пытаюсь воссоздать ту же форму без коллективных форм laravel, потому что она устарела.

Это моя попытка воссоздания этой формы:

@extends('layouts.app')
@section('content')
    <h1>Edit post</h1>
    <form action="{{ route('posts.update'), $post->id }}" method="POST">
    @csrf
    <div class="form-group">
        <label for="title">Title</label>
        <input class="form-control" type="text" id="title" name="title" value={{$post->title}}>
    </div>
    <div class="form-group">
        <label for="body">Body</label>
        <textarea class="form-control" id="body" rows="3" name="body" value={{$post->body}}></textarea>
    </div>
    <input type="submit" class="btn btn-primary">
</form>
@endsection

Я получаю следующую ошибку: Missing required parameters for [Route: posts.update] [URI: posts/{post}]. (View: C:\xampp\htdocs\blog\resources\views\posts\edit.blade.php)

Похоже, я не отправляю идентификаторпараметр правильно.

Кроме того, как я могу воссоздать эту часть: {{Form::hidden('_method', 'PUT')}} в простом HTML?

Ответы [ 2 ]

2 голосов
/ 07 марта 2019

Вы можете воссоздать ввод method с помощью:

@method('PUT')

Вам нужно поместить $post->id внутрь route() и использовать метод Form Spoofing (@method('PUT')). Попробуйте это:

@extends('layouts.app')
@section('content')
    <h1>Edit post</h1>
    <form action="{{ route('posts.update', $post->id) }}" method="POST">
    @csrf
    @method('PUT')
    <div class="form-group">
        <label for="title">Title</label>
        <input class="form-control" type="text" id="title" name="title" value={{$post->title}}>
    </div>
    <div class="form-group">
        <label for="body">Body</label>
        <textarea class="form-control" id="body" rows="3" name="body" value={{$post->body}}></textarea>
    </div>
    <input type="submit" class="btn btn-primary">
</form>
@endsection

1 голос
/ 07 марта 2019

Ваша ошибка вызвана тем, что $post->id находится вне функции route().

Измените:

route('posts.update'), $post->id

на:

route('posts.update', $post)

Что касается второго вопроса, то вот как Form::hidden('_method', 'PUT') отображается как HTML:

<input type="hidden" name="_method" value="PUT">

Но вы можете использовать @method, если предпочитаете более короткий способ его написания:

<form action="{{ route('posts.update', $post) }}" method="POST">
    @method('PUT')
    @csrf
    ...
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...