我使用的是Backpack 5 for Laravel的免费版本作为我的管理面板。此外,我使用Laravel 10.13和PHP 8.2.6。我一直在尝试创建一个功能来为我的博客文章添加图片,但是每当我保存文件时,它会显示在我的数据库中以下路径:*C:\wamp64\tmp\phpEF80.tmp * 但是,我需要将我的文件保存在public/images/news中。请问你能帮我解决这个问题吗?我在谷歌上搜索过,甚至找不到类似的解决方案。主要是人们有问题与错误的目录,或他们大炮打开文件,但似乎没有人有问题与保存文件到临时目录的web服务器。重新启动服务器并清理缓存或运行php artisan optimize
都无济于事。在Controller和Model中使用public作为磁盘也会产生同样的问题。
迁移文件
Schema::create('news', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('article');
$table->string('main_picture_path');
$table->timestamps();
});
型号
use CrudTrait;
use HasFactory;
protected $fillable = [
'title',
'article',
'main_picture_path'
];
public function setImageAttribute($value)
{
$attribute_name = "main_picture_path";
$disk = "images";
$destination_path = "news";
$this->uploadFileToDisk($value, $attribute_name, $disk, $destination_path);
}
CRUD控制器
protected function setupCreateOperation()
{
CRUD::setValidation(NewsRequest::class);
CRUD::field('title');
CRUD::field('article');
$this->crud->addField([
'name' => 'main_picture_path',
'label' => 'main_picture_path',
'type' => 'upload',
'upload' => true,
'disk' => 'images',
]);
}
文件系统
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
'throw' => false,
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
'throw' => false,
],
'images' => [
'driver' => 'local',
'root' => public_path('images'),
],
]
我需要我的文件保存在公共/图像/新闻。我在谷歌上搜索过,甚至找不到类似的解决方案。似乎没有人在将文件保存到Web服务器的临时目录中时遇到问题。重新启动服务器并清理缓存或运行php artisan optimize
都无济于事。在Controller和Model中使用public作为磁盘也会产生同样的问题。此外,我尝试在我的modal中编写简单的调试代码,在 setImageAttribute 方法中,但它根本不起作用,没有任何输出:
$attribute_name = "main_picture_path";
if (!request()->hasFile($attribute_name)) {
throw new \Exception('No file was uploaded');
}
if (!request()->file($attribute_name)->isValid()) {
throw new \Exception('Uploaded file is not valid');
}
throw new \Exception('IT SHOULD WORK');
1条答案
按热度按时间flvlnr441#
mutator应该在方法名中有属性名。在我的例子中,我将mutator称为 setImageAttribute,我的属性名为 main_picture_path,因此为了让一切都能完美地工作,mutator应该命名为如下:setMainPicturePathAttribute。**文档中没有提到它,几个小时的努力工作帮助我找到了解决方案。