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

问题描述 投票:1回答:2

我正在尝试在新版本(5.8)中重新创建一个旧的laravel版本的博客应用程序。在旧版本中,我使用laravel collective作为表单,我的编辑帖子表单如下所示:

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

laravel forms
2个回答
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
投票

您的错误是由$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>
© www.soinside.com 2019 - 2024. All rights reserved.