#laravel #forms
#laravel #формы
Вопрос:
Я пытаюсь воссоздать форму заявки на блог старой версии laravel в новой версии (5.8). В старой версии я использовал laravel collective для форм, и моя форма редактирования post выглядит следующим образом:
@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:xampphtdocsblogresourcesviewspostsedit.blade.php)
Похоже, я неправильно отправляю параметр id.
Кроме того, как я могу воссоздать эту часть: {{Form::hidden('_method', 'PUT')}}
в обычном HTML?
Ответ №1:
Вы можете воссоздать method
входные данные с помощью этого:
@method('PUT')
Вам нужно поместить $post->id
внутрь route()
и использовать подмену метода формы ( @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
Ответ №2:
Ваша ошибка вызвана тем, что вы $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>