Symfony 2文件上传设置默认文件

时间:2016-02-10 16:06:09

标签: php symfony

我在Symfony2应用程序中有一个表单,我要求用户上传文件。此字段不是必需的。目前,我使用以下命令处理用户的文件:

$file = $form['attachement']->getData();

我的问题是,如果$ file返回NULL,我该如何设置默认文件,即用户不想上传任何文件? 谢谢。

2 个答案:

答案 0 :(得分:1)

首先,您必须从默认文件中创建有效对象 为此,请使用Symfony\Component\HttpFoundation\File

用法:$file = new File('path/of/your/default/file');

然后,您必须在数据绑定完成之前更新您的表单 为此,您有两个解决方案:

1-如果字段为空,请使用FormEvent手动设置文件。 (例如PRE_SUBMITPOST_SUBMIT

2-在您的实体中使用prePersist / preUpdate挂钩。 (不涉及移动逻辑,未映射的属性'附件'应该已存在于您的实体中)

对于选项1,请参阅食谱的Dynamic form modification章节并查找适当的事件(文档将提供选择它的信息)。

对于2,请参阅Doctrine文档的Events章节 像下面这样的东西应该做的工作:

/**
 * @ORM\HasLifecycleCallbacks
 */
class YourEntity {
    /**
     *
     * @ORM\PrePersist
     * @ORM\PreUpdate
     */
    public function manageFile()
    {
        if ($this->attachment === null) {
            $file = new File('path/of/your/default/file');
            $this->setAttachment($file);
        }
    }
}

我希望这对你来说已经足够了。

答案 1 :(得分:0)

我想,学说Lifecycle Events应该对你有帮助。使用prePersistpreUpdate事件检查$this->file === null,并设置默认值。