Php Symfony 2文件上载设置默认文件

Php Symfony 2文件上载设置默认文件,php,symfony,Php,Symfony,我在我的Symfony2应用程序中有一个表单,我要求用户上传一个文件。此字段不是必需的。目前,我使用以下命令处理用户的文件: $file = $form['attachement']->getData(); 我的问题是,如果$file返回NULL,即用户不想上传任何文件,我如何设置默认文件? 谢谢。我想,条令应该对你有所帮助。使用prePersist或preUpdate事件检查is$this->file===null,并设置默认值。首先,必须从默认文件创建有效对象。 要做到这一点,请使用

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

$file = $form['attachement']->getData();
我的问题是,如果$file返回NULL,即用户不想上传任何文件,我如何设置默认文件?
谢谢。

我想,条令应该对你有所帮助。使用
prePersist
preUpdate
事件检查is
$this->file===null
,并设置默认值。

首先,必须从默认文件创建有效对象。
要做到这一点,请使用

用法:
$file=newfile('path/of/your/default/file')

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

1-如果字段为空,则使用
FormEvent
手动设置文件。(例如,
提交前
提交后

2-在实体中使用prePersist/preUpdate挂钩。(不涉及移动逻辑,未映射属性“attachment”应已存在于实体中)

对于选项1,请参阅烹饪手册的章节,并查找适当的事件(文档将提供选择该事件的信息)

关于第2章,请参见条令文件章节。
类似于以下内容的内容应该可以完成这项工作:

/**
 * @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);
        }
    }
}

我希望对您来说足够了。

目前我正在检查文件是否正确=在我的控制器中为空。问题是我想在else语句中设置一个默认文件,但找不到相应的函数。如果我使用setFile(“file/path”),我将调用null上的成员函数setFile()。@Jack,您可以将此逻辑从控制器移动到实体。它允许您在创建实体时及时设置默认值。这就是你想要的吗?事实上,我想把它留在一个控制器中,就像现在一样。但若并没有办法,我会把它转移到实体。我已经阅读了有关生命周期回调的文档,但也没有找到关于如何设置默认文件的任何信息((.也许有人可以指出它?谢谢。实际上,
$file=new file('path/of/your/default/file');
足以完成所有工作))