La forme de la vue de données devrait être une instance de la classe ... mais c'est une(n) chaîne
Je suis actuellement en train de recevoir l'erreur suivante:
"La forme de la vue de données devrait être une instance de la classe Symfony\Component\HttpFoundation\File\Fichier, mais est un(n) chaîne de caractères. Vous pouvez éviter cette erreur en définissant le "data_class" option à la valeur null ou par l'ajout d'une vue transformateur qui transforme un(n) chaîne de caractères à une instance de Symfony\Component\HttpFoundation\File\Fichier."
SoundController - fonction de téléchargement
/**
* @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 - Forme
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);
}
- Et mon SongController: pastebin.com/QNq4Jfbn
Vous devez vous connecter pour publier un commentaire.
Voici la réponse:
Vous dire à doctrine que vous souhaitez stocker une chaîne de caractères, mais vous effectuez le rendu d'un bouton télécharger dans la forme qui vous envoyer un fichier physique qui vous ne souhaitez pas stocker dans votre base de données à tous. Au lieu de cela, vous souhaitez déplacer le fichier dans un répertoire temporaire de votre répertoire de téléchargement, et vous voulez vous rappeler le nom du fichier dans la base de données c'est pourquoi vous avez besoin de cette propriété, ce qui est une chaîne de caractères.
Meilleur moyen est de suivre ce page