首先,我是一个初学者,我知道这个问题已经被问过几次了,也得到了回答。我已经尝试了解决方案,或者我已经实施了建议,所以我来这里寻求专家的帮助!
我试过的:-在我的表单元素中添加@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