Laravel(v 5.4)プロジェクトに取り組んでいます。カテゴリを管理するためにCRUDを実行しました。現在、新しいカテゴリを作成でき、削除できます。
カテゴリを削除するビュー(ブレード付き)を作成しました。
<table class="table">
<thead>
<th>Name</th>
<th>Action</th>
</thead>
<tbody>
@foreach ($categories as $category)
<tr>
<td>$category->name</td>
<td>
<a href="{{ url('/categories', ['id' => $category->id]) }}">
<button class="btn btn-default">
Delete
</button>
</a>
</td>
</tr>
@endforeach
</tbody>
</table>
そして、ルーティングファイルweb.phpで、私は書きました:
Route::delete('/categories/{id}', CategoryController@destroy);
カテゴリを削除し、カテゴリのリストにリダイレクトするdestroy()メソッドを備えたController CategoryControllerがあります。しかし、削除するボタンをクリックすると、このルートが定義されていないことを説明するエラーが表示されます。 Route::delete
をRoute::get
で置き換えると機能します。 URLはGETで呼び出されると思いますが、他のアクションのためにそれを保持します。
リンクをフォームに置き換え、「method」属性の値として「DELETE」を試みましたが、機能しませんでした。
DELETEメソッドでURLを呼び出してRoute::delete
でキャッチするにはどうすればよいですか?
前もって感謝します。
URLをクリックすると、常にGETメソッドになります。
DELETEとして定義したいので、投稿フォームに作り直して追加する必要があります
<input type="hidden" name="_method" value="delete" />
初期化。交換のように:
<a href="{{ url('/categories', ['id' => $category->id]) }}">
<button class="btn btn-default">Delete</button>
</a>
で:
<form action="{{ url('/categories', ['id' => $category->id]) }}" method="post">
<input class="btn btn-default" type="submit" value="Delete" />
<input type="hidden" name="_method" value="delete" />
<input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>
PUTリクエストについても同様です。
Laravel 5.1 method_fieldから:
<form action="{{ url('/categories', ['id' => $category->id]) }}" method="post">
<input class="btn btn-default" type="submit" value="Delete" />
{!! method_field('delete') !!}
{!! csrf_field() !!}
</form>
Laravel 5.6が@タグだけであるため:
<form action="{{ url('/categories', ['id' => $category->id]) }}" method="post">
<input class="btn btn-default" type="submit" value="Delete" />
@method('delete')
@csrf
</form>
laravel 5.7の場合、私の例を見てください:
<form action="{{route('statuses.destroy',[$order_status->id_order_status])}}" method="POST">
@method('DELETE')
@csrf
<button type="submit">Delete</button>
</form>
GET
およびPOST
以外のメソッドでは、非表示フォーム入力を使用してメソッドタイプを指定する必要があります。 laravelがそれらを検出する方法です。あなたの場合、フォームを使用して削除アクションを送信する必要があります。これを行います。
<table class="table">
<thead>
<th>Name</th>
<th>Action</th>
</thead>
<tbody>
@foreach ($categories as $category)
<tr>
<td>$category->name</td>
<td>
<form action="/categories/{{ $category->id }}" method="post">
{{ method_field('delete') }}
<button class="btn btn-default" type="submit">Delete</button>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>