使用View Transformer将字符串转换为文件

时间:2017-05-27 21:08:59

标签: symfony symfony-3.2

我目前正在使用crud应用程序来创建博客风格的网站。

博客对象需要上传文件,我将其作为字符串存储在数据库中。但是,当我尝试编辑现有博客时,我收到此错误。

The form's view data is expected to be an instance of class Symfony\Component\HttpFoundation\File\File, but is a(n) string. You can avoid this error by setting the "data_class" option to null or by adding a view transformer that transforms a(n) string to an instance of Symfony\Component\HttpFoundation\File\File.

我试图弄清楚如何做到这一点。谷歌搜索确实指向我查看视图变换器的页面。但是那里的例子展示了如何将字符串转换为实体(和问题)。但是,我不确定这是否正是我应该处理的方式,因为我试图将字符串转换为的对象是一个类Symfony \ Component \ HttpFoundation \ File \ File。我只是想知道有谁知道如何做到这一点。我的印象是我必须获得Symfony \ Component \ HttpFoundation \ File \ File类的实际文件类型,这就是我所难以接受的。如何做到这一点?

2 个答案:

答案 0 :(得分:3)

确定。所以我确实需要一段时间来解决这个问题,但这是我的第一次。基本上我所做的是使用BlogType.php类中的CallBackTranformer()函数并将对象(在本例中为File)转换为null对象(在表单中呈现时),然后将其返回到另一个方向。

以下是代码,以防有人想看到它。

$builder->get('imageUrl')->addModelTransformer(new CallBackTransformer(
        function($imageUrl) {
            return null;
        },
        function($imageUrl) {
            return $imageUrl;
        }
    ));

答案 1 :(得分:0)

在你的updateAction或editAction中,在方法的开头添加一些思考:

public function updateAction(Request $request ,$posts) { 

     $posts->setFile( 
            new File($this->getParameter('images_directory').'/'.$posts->getFile()
     ));

就像在symfony网站中一样: https://symfony.com/doc/3.2/controller/upload_file.html

use Symfony\Component\HttpFoundation\File\File;
// ...

$product->setBrochure(
    new File($this->getParameter('brochures_directory').'/'.$product->getBrochure())
);