首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel背包-文件上传不会触发变送器

Laravel背包-文件上传不会触发变送器
EN

Stack Overflow用户
提问于 2022-04-07 14:51:00
回答 1查看 260关注 0票数 0

我用最新的背包运行Laravel 9。我一直试图在我的表单中添加一个文件上传字段,但是我遇到了一些问题。我在CRUD控制器中添加了以下内容:

代码语言:javascript
复制
protected function setupCreateOperation()
{
    CRUD::setValidation(BuildRequest::class);
    // CRUD::field('id');
    CRUD::addField([   // Upload
        'name'      => 'firmware',
        'label'     => 'Firmware-file',
        'type'      => 'upload',
        'upload'    => true,
        'disk'      => 'uploads',
    ]);
}

此外,还在我的Model类中添加了以下mutator:

代码语言:javascript
复制
public function setFirmwareAttribute($value)
{
    dd();
    $attribute_name = "firmware";
    $disk = "public";
    $destination_path = "folder_1/subfolder_1";

    $this->uploadFileToDisk($value, $attribute_name, $disk, $destination_path);
}

我还有一个名为“固件”的数据库列来保存文件的路径。我的问题是,突变者似乎从来没有被召唤过。该文件也永远不会放在适当的文件夹中。我还会得到以下错误:

SQLSTATEHY000:一般错误: 1364字段‘固件’没有默认值

我在暗示我的固件字符串在创建时没有被填充。在迁移中使固件-列为空可以修复此错误,但在试图上载文件时,该条目仍然为"NULL“。我还添加了一个dd();来查看mutator是否被输入,但情况似乎并非如此。我还尝试过修改Mutator语法,使其与Laravel 9兼容,但这也没有帮助。另外,在从Laravel 8到9的迁移指南中,我没有发现任何更新mutator函数的地方,所以我假设新的mutator语法是向后兼容的。知道我在这里错过了什么吗?

编辑:我用Laravel 9更新了我的变形器,其行为完全相同:

代码语言:javascript
复制
    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);
        },
    );
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-09 12:04:46

您应该在模型的$fillable属性中定义固件属性,以使其具有可分配的质量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71784357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档