LARAVEL 9该路由不支持PUT方法.支持的方法:GET、HEAD



我只是得到一个错误,而试图更新数据。我使用post方法,而不是push。我试过添加@method('PUT'),但也不起作用。

创建新类别只是工作得很好,因为它应该做的,但当我试图编辑的东西,它只是抛出错误。我也试着使用route::put,但没有工作。

我CategoryController.php

<?php
namespace AppHttpControllersAdmin;
use AppHttpControllersController;
use AppModelsCategory;
use IlluminateHttpRequest;
class CategoryController extends Controller
{
/**
* Display a listing of the resource.
*
* @return IlluminateHttpResponse
*/
public function index()
{
//
$data = Category::all();
return view('admin.category.index', [
'data' => $data
]);
}
/**
* Show the form for creating a new resource.
*
* @return IlluminateHttpResponse
*/
public function create()
{
return view('admin.category.create');
}
/**
* Store a newly created resource in storage.
*
* @param  IlluminateHttpRequest  $request
* @return IlluminateHttpResponse
*/
public function store(Request $request)
{
$data = new Category;
$data->parent_id = 1;
$data->title = $request->title;
$data->keywords = $request->keywords;
$data->description = $request->description;
$data->status = $request->status;
$data->save();
return redirect('admin/category');
}
/**
* Display the specified resource.
*
* @param  AppModelsCategory  $category
* @return IlluminateHttpResponse
*/
public function show(Category $category)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param  AppModelsCategory  $category
* @return IlluminateHttpResponse
*/
public function edit(Category $category, $id)
{
//
$data = Category::find($id);
return view('admin.category.edit', [
'data' => $data
]);
}
/**
* Update the specified resource in storage.
*
* @param  IlluminateHttpRequest  $request
* @param  AppModelsCategory  $category
* @return IlluminateHttpResponse
*/
public function update(Request $request, Category $category, $id)
{
//
$data = Category::find($id);
$data->parent_id = 1;
$data->title = $request->title;
$data->keywords = $request->keywords;
$data->description = $request->description;
$data->status = $request->status;
$data->save();
return redirect('admin/category');
}
/**
* Remove the specified resource from storage.
*
* @param  AppModelsCategory  $category
* @return IlluminateHttpResponse
*/
public function destroy(Category $category)
{
//
}
}

我edit.blade.php

@extends('layouts.adminbase')
@section('title', 'Edit Category')
@section('content')
<!-- Begin Page Content -->
<div class="container-fluid">
<!-- Page Heading -->
<h1 class="h3 mb-4 text-gray-800">Edit Category: {{$data -> title}}</h1>
<!-- Collapsable Card-->
<div class="card shadow mb-4">
<!-- Card Header - Accordion -->
<a href="#collapseCardExample" class="d-block card-header py-3" data-toggle="collapse"
role="button" aria-expanded="true" aria-controls="collapseCardExample">
<h6 class="m-0 font-weight-bold text-primary">Category Elements</h6>
</a>
<!-- Card Content - Collapse -->
<div class="collapse show" id="collapseCardExample">
<div class="card-body">
<form action="/admin/category/update/{{$data->id}}" method="POST">
@csrf
<div class="card-body">
<div class="form-group">
<label for="exampleInputEmail1">Title</label>
<input type="text" class="form-control" name="title" value="{{$data->title}}">
</div>
<div class="form-group">
<label for="exampleInputEmail1">Keywords</label>
<input type="text" class="form-control" name="keywords" value="{{$data->keywords}}">
</div>
<div class="form-group">
<label for="exampleInputEmail1">Description</label>
<input type="text" class="form-control" name="description" value="{{$data->description}}">
</div>
<div class="form-group">
<label for="exampleInputFile">Image</label>
<div class="input-group">
<div class="custom-file">
<input type="file" class="custom-file-input" name="image">
<label class="custom-file-label" for="exampleInputFile">Choose image file</label>
</div>
<div class="input-group-append">
<span class="input-group-text">Upload</span>
</div>
</div>
</div>
<div class="form-group">
<label>Status</label>
<select class="custom-select" name="status">
<option selected>{{$data->status}}</option>
<option>Enable</option>
<option>Disable</option>
</select>
</div>
</div>
<!-- /.card-body -->
<div class="card-footer">
<button type="submit" class="btn btn-primary">Update Data</button>
</div>
</form>
</div>
</div>
</div>
</div>
<!-- /.container-fluid -->
</div>
<!-- End of Main Content -->
@endsection

我的路线

// Admin category routes
Route::get('/admin/category', [AdminCategoryController::class,'index'] )->name('admin_category');
Route::get('/admin/category/create', [AdminCategoryController::class,'create'] )->name('admin_category_create');
Route::post('/admin/category/store', [AdminCategoryController::class,'store'] )->name('admin_category_store');
Route::get('/admin/category/edit/{id}', [AdminCategoryController::class,'edit'] )->name('admin_category_edit');
Route::post('/admin/category/update/{id}', [AdminCategoryController::class,'edit'] )->name('admin_category_update');

我会对你的代码做这些修改:edit.blade:

<form action="/admin/category/update/{{$data->id}}" method="POST">
@csrf
@method('PUT')
.........

路线:

Route::put('/admin/category/update/{id}', [AdminCategoryController::class,'update'] )->name('admin_category_update');

检查是否有效

还有一件事:如果您正确地创建了模型绑定,那么您的更新函数可能如下所示:
public function update(Request $request, Category $category, $id)
{
//
$category->parent_id = 1;
$category->title = $request->title;
$category->keywords = $request->keywords;
$category->description = $request->description;
$category->status = $request->status;
$category->save();
return redirect('admin/category');
}

这是因为你已经有了模型:public function update(Request $request, **Category $category**, $id)

最新更新