我正在尝试从旧版本的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')}}
?
答案 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>