Php 此路由不支持POST方法。支持的方法:GET,HEAD。拉维尔
我的编辑页面有问题。当我提交时,我收到以下错误: 此路由不支持POST方法。支持的方法:GET,HEAD 我不知道它是从哪里来的,因为我对拉雷维尔还很陌生 路由(web.php): 控制器:Php 此路由不支持POST方法。支持的方法:GET,HEAD。拉维尔,php,laravel,Php,Laravel,我的编辑页面有问题。当我提交时,我收到以下错误: 此路由不支持POST方法。支持的方法:GET,HEAD 我不知道它是从哪里来的,因为我对拉雷维尔还很陌生 路由(web.php): 控制器: public function edit($id) { return view('project.edit',[ 'project' => Project::find($id) ]); } /** * Up
public function edit($id)
{
return view('project.edit',[
'project' => Project::find($id)
]);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request)
{
$project = Project::find($request->id);
$project->project_name = $request->input('project_name');
$project->client = $request->input('client');
$project->description = $request->input('description');
$project->time_span = $request->input('time_span');
$project->text_report = $request->input('text_report');
$project->created_by = $request->input('created_by');
$project->save();
return redirect('/')->with('success', 'Project aangepast');
}
我在web.php中看到您的代码如下:Route::post('/edit/{id}','ProjectController@update');强> 步骤1:删除{id}随机参数,使其如下:Route::post('/edit','ProjectController@update');强> 第2步:然后删除表单中的@method('PUT'),这样我们就可以简单地使用POST方法 那么如何将ID传递给我的方法 步骤1:使用隐藏属性在表单中创建一个输入字段 比如说
步骤2:在控制器中的更新方法中,获取该ID
例如:
$id = $request->input('id');
然后,您可能无法使用它来查找要编辑的项目
$project = Project::find($id)
//OR
$project = Project::where('id',$id);
有多种方法可以处理此问题:
PUT
,您可以将表单操作更改为POST
,并添加一个隐藏的method\u字段
,该字段具有值PUT
和一个隐藏的csrf字段(如果您使用的是blade,则只需添加@csrf\u字段
和{{method\u字段('PUT')}
)。这样,表单将接受请求POST
。因为您是定义路由而不使用资源组的人,所以它可以正常工作嗨,你不必写所有的路线,只要遵循惯例就行了 选中:由资源控制器处理的操作部分 由于HTML表单不能发出PUT、PATCH或DELETE请求,因此需要添加一个隐藏的方法。从n laravel发布数据时,您必须使用
<form action="/foo/bar" method="POST">
@method('PUT')
</form>
@方法('PUT')
我知道这不是OPs post的解决方案。然而,当我搜索这个错误的答案时,这篇文章是第一篇被谷歌编入索引的文章。因此,我觉得这将有利于其他人
以下错误
此路由不支持POST方法。支持
方法:获取,头部
由于未清除路由缓存而导致
php artisan route:cache
主要是这种错误产生,, 1.首先检查一个代码,在代码中,我们定义@csrf
解决此问题的简单方法是将其添加到表单中
{{ csrf_field() }}
<input type="hidden" name="_method" value="PUT">
我有一个类似的问题,唯一的解决办法是重新启动我用作开发环境的vagrant。除此之外,没有一个artisan和composer命令没有帮助 我刚刚删除了url末尾的斜杠,它开始工作了。。。
/managers/games/id/push/
发送至:
$http({
method: 'POST',
url: "/managers/games/id/push",
这可能与升级到laravel 5.8有关。在表单上添加@method('PUT')
经验:
@csrf
@方法('PUT')
如果您使用的是Route::group,以及类似于LaravelLocalization(来自MCAMARA)的供应商插件,则需要将POST路由置于该组之外。我在使用这个插件发布路由时遇到了一些问题,我现在通过将这些路由放在Route::group之外解决了这些问题。在我的例子中,只需运行命令,就可以很好地工作了
php artisan route:clear
您的路线有问题,请使用以下代码:
在第8章:
web.php:
应用程序/Http/控制器:
<?php
namespace App\Http\Controllers\Projects;
use App\Http\Requests\Project\ProjectRequest;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class ProjectController extends Controller {
//---Constructor Function
public function __construct() {
$this->middleware('auth:sanctum');
}//---End of Function Constructor
//---List Product
public function index() {
}//---End of Function index
//---Create
public function Create() {
}//---End of Function Create
//---Store
public function Store(ProjectRequest $request) {
}//---End of Function Store
//---Show
public function Show($project) {
}//---End of Function Show
//---Destroy
public function Destroy($project) {
}//---End of Function Destroy
//---Edit
public function Edit($project) {
}//---End of Function Edit
//---Update
public function Update(ProjectRequest $request, $project) {
}//---End of Function Update
}
?>
是的,我的问题是相同的。但在另一方面。您的错误是由您的查询引起的。如果要查看错误,需要使用此路由的GET方法。就你我而言,我们使用的是邮政。这样我们就看不到真正的错误消息…您当前通过PUT方法调用update controller方法。将表单更改为使用PUT或更改行路由::PUT('/edit','ProjectController@update'); 发送::post('/edit','ProjectController@update');谢谢你的评论,但是当我用post替换put并返回一个新错误时:从空值创建默认对象当你找到项目时,你还应该检查find()返回一个有效的项目对象,而不是null。你考虑过使用资源路由/控制器吗?您可以只使用Route::resource('projects','ProjectController')代码>设置所有必要的路线。它仍然返回:此路由不支持PUT方法。支持的方法:POST。请填写错误消息或至少给我一张您表单的屏幕截图,错误消息我仍然看不到包含表单的“视图”的代码,我无法编辑它,它表示我的代码太多,无法容纳我收到的文本量。请向我发送您控制器的屏幕截图并查看我的电子邮件, vtvc17@gmail.com所以我可以帮助你们,谢谢:)我做了这两个方法,并返回从空创建默认对象value@JohnSmith2521尝试传递项目id,就像您在编辑时那样Route::put('/edit/{id}','ProjectController@update');代码>问题是它找不到具有所提供id的项目。路由本身现在运行良好。这意味着您没有发送id或请求丢失。您可以在inspect elements networking标头中检查请求。@JohnSmith2521您是如何重定向到路由的?Url是否正确?@JohnSmith2521您是否也更改了路由操作?让我们看看。这不是由于未清除缓存造成的。在某些情况下,这可能会解决问题。@liamvictor我不确定这是否对您有帮助,但我感谢您的评论。我今天又遇到了这个问题,你的评论恰到好处地唤起了我的记忆。@stoi2m1I我也遇到了类似的问题,唯一的解决办法就是重新启动vagrant。没有一个artisan和composer命令没有帮助。@darko99:您找到了解决此问题的方法。我会把它作为一个答案来帮助别人更好地看到它。我认为您的解决方案可能会在评论中丢失
$http({
method: 'POST',
url: "/managers/games/id/push",
<form action="..." method="POST">
@csrf
@method('PUT')
</form>
php artisan route:clear
Route::middleware(['auth:sanctum', 'verified'])->group(function () {
Route::prefix('projects')->group(function () {
Route::get('', 'Projects\ProjectController@index');
Route::get('create','Projects\ProjectController@create');
Route::post('create','Projects\ProjectController@store');
Route::get('show/{id}', 'Projects\ProjectController@show');
Route::get('delete/{id}', 'Projects\ProjectController@destroy');
Route::get('edit/{id}', 'Projects\ProjectController@edit');
Route::put('edit/{id}','Projects\ProjectController@update');
});
});
<?php
namespace App\Http\Controllers\Projects;
use App\Http\Requests\Project\ProjectRequest;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class ProjectController extends Controller {
//---Constructor Function
public function __construct() {
$this->middleware('auth:sanctum');
}//---End of Function Constructor
//---List Product
public function index() {
}//---End of Function index
//---Create
public function Create() {
}//---End of Function Create
//---Store
public function Store(ProjectRequest $request) {
}//---End of Function Store
//---Show
public function Show($project) {
}//---End of Function Show
//---Destroy
public function Destroy($project) {
}//---End of Function Destroy
//---Edit
public function Edit($project) {
}//---End of Function Edit
//---Update
public function Update(ProjectRequest $request, $project) {
}//---End of Function Update
}
?>