通过Symfony2中的FormBuilder将文件内容插入MySQL数据库

时间:2013-07-10 18:27:22

标签: symfony doctrine-orm

在我的Symfony2应用程序中,我需要提供上传文本文件的选项。我已经通过使用FormBuilderInterface创建了一个具有'file'类型的字段来实现这一点。文件正确上传但我真正需要的是从文件中获取文本并将其插入到正确的db表列中。有没有办法在POST上从上传的文件中获取文本?感谢。

1 个答案:

答案 0 :(得分:0)

至少有两种方式。

在这两种情况下,重点是打开上传并将其内容填充到实体属性(在表单发布之后但在数据持久保存到db之前)。因此,您需要有2个实体属性:上传文件处理程序(未映射到数据库)和文件文本本身(映射到数据库)。

以下是生命周期回调的示例:

<强>实体:

/**
 * @ORM\Entity()
 * @ORM\HasLifecycleCallbacks
 */
class SomeEntity {

    /**
     * Virtual field used for handling the file
     *
     * @Assert\File()
     */
    private $fileHandler;

    /**
     * @var string
     *
     * @ORM\Column(type="text")
     */
    private $file;

    /**
     * @ORM\PrePersist()
     * @ORM\PreUpdate()
     */
    public function saveFileContent()
    {
        $tmpName = md5(uniqid(mt_rand(), true)) . '.' . $this->fileHandler->guessExtension();
        try
        {
            $this->fileHandler->move(
                '../../../tmp/',
                $tmpName
            );
        } catch (\Exception $e) {}

        $this->setFile(file_get_contents('../../../tmp/' . $tmpName));
        unlink('../../../tmp/' . $tmpName);
    }
}

这也可能有所帮助: How to handle File Uploads with Doctrine