Pertanyaan Data tampilan formulir diharapkan menjadi instance dari kelas ... tetapi merupakan string (n)


Saat ini saya menerima kesalahan berikut:

"Data tampilan formulir diharapkan menjadi instance kelas Symfony \ Component \ HttpFoundation \ File \ File, tetapi merupakan string (n). Anda dapat menghindari kesalahan ini dengan menyetel opsi" data_class "ke nol atau dengan menambahkan tampilan transformator yang mengubah string (n) menjadi turunan dari Symfony \ Component \ HttpFoundation \ File \ File. "

SoundController - fungsi upload

 /**
 * @Security("is_granted('IS_AUTHENTICATED_FULLY')")
 * @Route("/song/upload", name="upload_song")
 * @param Request $request
 * @return \Symfony\Component\HttpFoundation\Response
 */
public function uploadSong(Request $request)
{
    $song = new Sound();

    $form = $this->createForm(SoundType::class, $song);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid())
    {
        $file = $song->getFile();
        $user = $this->getUser();

        $fileName = $this
            ->get('app.file_uploader')
            ->setDir($this->get('kernel')->getRootDir()."/../web".$this->getParameter('songs_directory'))
            ->upload($file);

        $song->setFile($fileName);

        $file = $song->getCoverFile();
        if ($file === null)
        {
            $song->setCoverFile($this->getParameter('default_cover'));
        }
        else
        {
            $fileName = $this
                ->get('app.file_uploader')
                ->setDir($this->get('kernel')->getRootDir()."/../web".$this->getParameter('covers_directory'))
                ->upload($file);

            $song->setCoverFile($fileName);
        }

        $song->setUploader($user);
        $song->setUploaderID($user->getId());
        $user->addSong($song);

        $entityManager = $this->getDoctrine()->getManager();
        $entityManager->persist($song);
        $entityManager->flush();

        return $this->redirectToRoute('song_view', [
            'id' => $song->getId()
        ]);
    }

    return $this->render('song/upload.html.twig', [
        'form' => $form->createView()
    ]);
}

SoundType - Formulir

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('file', FileType::class)
        ->add('coverFile', FileType::class, [
            'required' => false
        ])
        ->add('songName', TextType::class)
        ->add('songAuthor', TextType::class);
}

5
2017-12-05 21:06


asal


Jawaban:


Inilah jawabannya:

{
      $builder
          ->add('file', FileType::class, array('data_class' => null))
          ->add('coverFile', FileType::class, array('data_class' => null))
          ->add('coverFile', FileType::class, array('data_class' => null,'required' => false))
          ->add('songName', TextType::class)
          ->add('songAuthor', TextType::class);
  }

7
2017-12-09 16:41



/**
 * @ORM\Column(type="string")
 *
 * @Assert\NotBlank(message="Please, upload the song as a MP3 file.")
 * @Assert\File(mimeTypes={ "audio/mpeg", "audio/wav", "audio/x-wav", "application/octet-stream" })
 */
private $file;

Anda memberi tahu doktrin bahwa Anda ingin menyimpan string, tetapi Anda membuat tombol unggah di formulir yang mengirimi Anda file fisik yang tidak ingin Anda simpan dalam database Anda sama sekali. Sebagai gantinya Anda ingin memindahkan file dari direktori sementara ke direktori upload Anda, dan Anda ingin mengingat nama file ke dalam database karenanya Anda membutuhkan properti ini yang merupakan string.

Cara terbaik adalah mengikuti ini halaman 


2
2017-12-05 21:28