ContextErrorException в Symfony 3 - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь загрузить изображения в SF3, и у меня появляется эта ошибка при загрузке:

Отсутствует аргумент 2 для Symfony \ Component \ HttpFoundation \ File \ UploadedFile :: __ construct ().

Это часть моей сущности, где находится ошибка (строка 9 здесь):

public function preUpload()
{
    // if there is no file (optional field)
    if (null === $this->image) {
        return;
    }

    // $file = new File($this->getUploadRootDir() . '/' . $this->image);
    $file = new File($this->getUploadRootDir() .'/' . $this->image);
    $uploadedfile = new UploadedFile($this->getUploadRootDir() .'/' . $this->image);

    // the name of the file is its id, one should just store also its extension
    // to make clean, we should rename this attribute to "extension" rather than "url" 
    $this->url = $file->guessExtension();

    // and we generate the alt attribute of the <img> tag,
    // the value of the file name on the user's PC
    $this->alt = $uploadedfile->getClientOriginalName();
} 

Тогда мой контроллер:

public function mediaEditAction(Request $request)
{
    $media = new Media();
    $form = $this->createForm(MediaType::class, $media);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        $file = $media->getImage();
        $fileName = md5(uniqid()).'.'.$file->guessExtension();
        $file->move(
            $this->getParameter('images_directory'),
            $fileName
        );
        $media->setImage($fileName);

        $em = $this->getDoctrine()->getManager();
        $em->persist($media);
        $em->flush();

        $request->getSession()->getFlashBag()->add('Notice', 'Photo added with success');

        // redirection
        $url = $this->generateUrl('medecin_parametre');

        // permanent redirection with the status http 301
        return $this->redirect($url, 301);
    } else {
        return $this->render('DoctixMedecinBundle:Medecin:mediaedit.html.twig', array(
            'form' => $form->createView()
        ));
    }
}

1 Ответ

0 голосов
/ 25 июня 2018

Кажется, что вы делаете ненужную работу и делаете это немного сложнее, чем, вероятно, должно быть. Вы следовали этому руководству Symfony, как загрузить файлы ?

Между тем, похоже, что имя изображения находится в $this->image, поэтому вы можете просто передать его в качестве аргумента второго конструктора.

$uploadedfile = new UploadedFile($this->getUploadRootDir().'/'.$this->image, $this->image);

Однако UploadedFile , вероятно, должен исходить только от отправки формы, и в вашей сущности вы захотите использовать Файл взамен - например, так:

use Symfony\Component\HttpFoundation\File\File;

$uploadedfile = new File($this->getUploadRootDir() .'/' . $this->image);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...