缺少路线所需的参数(Laravel 5.8)

时间:2019-03-07 14:28:51

标签: laravel forms

我正在尝试从旧版本的laravel重新创建博客应用程序(5.8)。在旧版本中,我使用laravel Collector来创建表单,而我的编辑发布表单如下所示:

@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)

好像我没有正确发送id参数。

此外,我该如何用纯HTML重新创建此部分:{{Form::hidden('_method', 'PUT')}}

2 个答案:

答案 0 :(得分:2)

您可以使用以下命令重新创建method输入:

@method('PUT')

您需要将$post->id放在route()内,然后使用Form method 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 :(得分:1)

您的错误是由$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>