Laravel 背包 - 文件上传未触发突变器
Laravel Backpack - File upload is not triggering mutator
我 运行 Laravel 9 在最新的背包上。我一直在尝试将文件上传字段添加到我的表单中,但我遇到了 运行 问题。我已将以下内容添加到我的 CRUD 控制器中:
protected function setupCreateOperation()
{
CRUD::setValidation(BuildRequest::class);
// CRUD::field('id');
CRUD::addField([ // Upload
'name' => 'firmware',
'label' => 'Firmware-file',
'type' => 'upload',
'upload' => true,
'disk' => 'uploads',
]);
}
并在我的模型中添加了以下修改器 class:
public function setFirmwareAttribute($value)
{
dd();
$attribute_name = "firmware";
$disk = "public";
$destination_path = "folder_1/subfolder_1";
$this->uploadFileToDisk($value, $attribute_name, $disk, $destination_path);
}
我还有一个名为“firmware”的数据库列来保存文件的路径。我遇到的问题是似乎从未调用过增变器。该文件也永远不会被放置在适当的文件夹中。我还收到以下错误:
SQLSTATE[HY000]: General error: 1364 Field 'firmware' doesn't have a
default value
我是在暗示我的固件字符串在创建时没有被填充。在迁移中使固件列可为空可以修复此错误,但在尝试上传文件时该条目仍为“NULL”。我还添加了一个 dd();查看是否输入了增变器,但情况似乎并非如此。我还尝试将 Mutator 语法更改为 Laravel 9 兼容,但这也无济于事。此外,在从 Laravel 8 到 9 的迁移指南中,我找不到任何关于更新增变器函数的提及,所以我假设新的增变器语法是向后兼容的。关于我在这里遗漏了什么的任何线索?
编辑:我更改了我的增变器以使其与 Laravel 9 保持同步并且行为完全相同:
protected function firmware(): Attribute
{
dd();
return Attribute::make(
set: function ($value) {
$attribute_name = "firmware";
$disk = "public";
$destination_path = "folder_1/subfolder_1";
$this->uploadFileToDisk($value, $attribute_name, $disk, $destination_path);
},
);
}
您应该在模型的 $fillable 属性 中定义固件属性,以使其可批量分配。
我 运行 Laravel 9 在最新的背包上。我一直在尝试将文件上传字段添加到我的表单中,但我遇到了 运行 问题。我已将以下内容添加到我的 CRUD 控制器中:
protected function setupCreateOperation()
{
CRUD::setValidation(BuildRequest::class);
// CRUD::field('id');
CRUD::addField([ // Upload
'name' => 'firmware',
'label' => 'Firmware-file',
'type' => 'upload',
'upload' => true,
'disk' => 'uploads',
]);
}
并在我的模型中添加了以下修改器 class:
public function setFirmwareAttribute($value)
{
dd();
$attribute_name = "firmware";
$disk = "public";
$destination_path = "folder_1/subfolder_1";
$this->uploadFileToDisk($value, $attribute_name, $disk, $destination_path);
}
我还有一个名为“firmware”的数据库列来保存文件的路径。我遇到的问题是似乎从未调用过增变器。该文件也永远不会被放置在适当的文件夹中。我还收到以下错误:
SQLSTATE[HY000]: General error: 1364 Field 'firmware' doesn't have a default value
我是在暗示我的固件字符串在创建时没有被填充。在迁移中使固件列可为空可以修复此错误,但在尝试上传文件时该条目仍为“NULL”。我还添加了一个 dd();查看是否输入了增变器,但情况似乎并非如此。我还尝试将 Mutator 语法更改为 Laravel 9 兼容,但这也无济于事。此外,在从 Laravel 8 到 9 的迁移指南中,我找不到任何关于更新增变器函数的提及,所以我假设新的增变器语法是向后兼容的。关于我在这里遗漏了什么的任何线索?
编辑:我更改了我的增变器以使其与 Laravel 9 保持同步并且行为完全相同:
protected function firmware(): Attribute
{
dd();
return Attribute::make(
set: function ($value) {
$attribute_name = "firmware";
$disk = "public";
$destination_path = "folder_1/subfolder_1";
$this->uploadFileToDisk($value, $attribute_name, $disk, $destination_path);
},
);
}
您应该在模型的 $fillable 属性 中定义固件属性,以使其可批量分配。