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 属性 中定义固件属性,以使其可批量分配。