此路由不支持POST方法.支持的方法:GET、HEAD.Laravel 9



首先,我是一个初学者,我知道这个问题已经被问过几次了,也得到了回答。我已经尝试了解决方案,或者我已经实施了建议,所以我来这里寻求专家的帮助!

我试过的:-在我的表单元素中添加@csrf到我的刀片文件。-检查我的post和get在我的路线是小写的。-将get改为post,因此是第四个

以上对解决问题没有帮助,唉,我还是摸不着头脑。

实际上,我正在尝试上传图像,给图像一个标题并提交。它应该转到另一个页面,在左上角的下拉菜单中显示数据,但我看到的是标题中的图像。

编辑:解决方案:我运行以下命令,它删除了错误:

我在下面包含了错误的图片和我的文件夹结构:

出现错误的图像。项目目录结构

代码如下:

Web.php

<?php
use IlluminateSupportFacadesRoute;

Route::get('/', function () {
return view('welcome');
});
Auth::routes();
Route::get('/p/create', 'AppHttpControllersPostsController@create');
Route::post('/p/', 'AppHttpControllersPostsController@store');
Route::get('profile/{user}', 'AppHttpControllersProfilesController@index')- 
>name('profile.show');

PostsController.php

<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use AppModelsUser;
class PostsController extends Controller
{
public function constructor()
{
$this->middleware['auth'];
}

public function create()
{
return view('posts.create');
}

public function store() {
$data = request()->validate([
'caption' => 'required',
'image' => 'required|image',
]);
dd(request('image')->store('uploads','public'));
auth()->user()->posts()->create($data);
dd(request()->all());
}
}

模型/php

<?php
namespace AppModels;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;
class Post extends Model
{
public function user()
{
return $this->belongsTo(User::class);
}
}

视图/文章/create.blade.php

@extends('layouts.app')
@section('content')
<div class="container">
<form action="/p" enctype="multipart/form-data" method="post">
@csrf
<div class="row">
<div class="col-8 offset-2">
<div class="row mb-3">
<div class="row pt-5">
<h1>Add New Post</h1>
</div>
<label for="caption" class="col-md-4 col-form-label">Post Caption</label>

<input id="caption"
type="text"
class="form-control @error('caption') is-invalid @enderror"
name="caption"
value="{{ old('caption') }}"
autocomplete="caption" autofocus>
@error('caption')
<strong>{{ $message }}</strong>
@enderror

</div>
<div class="row">
<label for="image" class="col-md-4 col-form-label">Post Image</label>
<input type="file" class="form-control-file" id="image" name="image">
@error('image')
<strong>{{ $message }}</strong>
@enderror

<div class="pt-3">
<button class="btn btn-primary btn-sm">Add New Post</button>
</div>


</div>
</div>
</div>

</form>

@endsection提前感谢您的帮助!

这可能是因为你的路由被定义为"/p/",而你的表单动作只是"/p"(没有尾斜杠)?我会先确保它们完全匹配。将路由更改为:

Route::post('/p', 'AppHttpControllersPostsController@store');

你也可以尝试拓宽路由定义。

Route::post('/p/', 'AppHttpControllersPostsController@store');

将成为

Route::any('/p/', 'AppHttpControllersPostsController@store');

EDIT:解决方案:我运行以下命令,它删除了错误:

  • 你需要使用和命名你的路由器,现在路由看起来像

    Route::post('p',[PostsController::class, 'store'])->name('p.name');
    
  • And action form:

    <form action="{{route('p.name')}}" enctype="multipart/form-data" method="post">
    
  • 并清除缓存路由,然后更改:

php artisan route:cache

相关内容

  • 没有找到相关文章

最新更新