Преобразование строки в файл с помощью View Transformer

В настоящее время я использую приложение 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.

Я пытаюсь понять, как это сделать. Поиск в Google указал мне на страницу, где объясняются преобразователи представлений. Но пример показывает, как преобразовать строку в объект (и задачу). Однако я не уверен, что это именно тот способ, которым я должен обрабатывать это, поскольку объект, в который я пытаюсь преобразовать строку, представляет собой класс Symfony\Component\HttpFoundation\File\File. Мне просто было интересно, кто-нибудь знает, как я могу это сделать. У меня сложилось впечатление, что мне нужно будет получить фактический тип файла класса Symfony\Component\HttpFoundation\File\File, и это то, на чем я застрял. Как это сделать?


person Kaley36    schedule 27.05.2017    source источник


Ответы (2)


Ok. так что мне потребовалось некоторое время, чтобы понять это, но это был мой первый раз. По сути, я использовал функцию CallBackTranformer() в классе BlogType.php и преобразовал объект, в данном случае файл, в нулевой объект при его отображении в форме, а затем просто вернул его в другом направлении.

Вот код, если кто захочет его посмотреть.

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

В вашем 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())
);
person Grzegorz Brzęczyszczykiewicz    schedule 09.04.2018