Une derniere petite chose. Comment mettre une image part defaut ?
J'ai pas eu de probleme a le faire pour l'avatar avec le Constructeur. Par contre quand j'utilise la case à cocher "supprimer ?", forcement j'ai plus d'image par defaut. Y a t'il un moyen simple pour le faire ?
Bonjour,
J’utilise le Bundle VichUploaderBundle pour les envois de fichier.
Mais je rencontre un message d'erreur lors d'envois de fichier.
message d’erreur :
- "Serialization of 'Symfony\Component\HttpFoundation\File\File' is not allowed"
Je ne vois pas où est mon erreur, j'ai suivis à la lettre la documentation :
Pour info, mon fichier est quand même bien envoyer malgré tout.
12 réponses
Hello,
Il nous faudrait plus de matière pour t'aider :
- le code de ton entity (es-ce une entité User qui est serialisée par le composant sécurité de Symfony?)
- le code de ton controlller
- ...
Voici le code de mon entity ( en l'occurrence User)
Ton entité User est effectivement sérialisée dans le composant sécurité. Et le message est clair, un élément de Type File n'est pas sérialisable...
Tu peux définir manuellemenent comment est sérialisé ton User (tu implémentes \Serializable et tu définis les fonctions serialize et unserialize).
Perso, je préfère laisser mon entité User avec les données minimales d'authentification, et créer une entité Profile liée en OneToOne, qui elle ne sera pas sérialisée.
Après c'est un choix à faire.
Merci Digivia ! je comprend mieux pourquoi maintent ^^. Je vais suivre ton conseil et refaire une Entity a coté.
Je comprend pas...
j'ai essayé ta méthode @Digivia ( "laisser mon entité User avec les données minimales d'authentification, et créer une entité Profile liée en OneToOne" )
mais j'ai toujours la même erreur !
"Serialization of 'Symfony\Component\HttpFoundation\File\File' is not allowed"
Mon controller :
Mon FormType :
Mon Entity :
Hello,
Effectivement, j'avais implémenté l'interface serializable dans mon entité Profile, autant pour moi. Ajoutes dans ton entity Profile:
Yehhh Un grand merci @Digivia ! ça fonction parfaitement ^^.
Par contre j'ai du mal a comprendre a quoi sert ce Serialisable :/ meme avec la doc...
Ton entité est sérialisée car elle est liée à User. C'est le process de sécurité de symfony qui gère ça en automatique. Pour plus d'infos, va voir ce lien: https://symfony.com/doc/2.4/cookbook/security/entity_provider.html#the-data-model
"What is the importance of serialize and unserialize?
The Serializable interface and its serialize and unserialize methods have been added to allow the User class to be serialized to the session. This may or may not be needed depending on your setup, but it's probably a good idea. The id is the most important value that needs to be serialized because the refreshUser() method reloads the user on each request by using the id. In practice, this means that the User object is reloaded from the database on each request using the id from the serialized object. This makes sure all of the User's data is fresh.
Symfony also uses the username, salt, and password to verify that the User has not changed between requests. Failing to serialize these may cause you to be logged out on each request. If your User implements EquatableInterface, then instead of these properties being checked, your isEqualTo method is simply called, and you can check whatever properties you want. Unless you understand this, you probably won't need to implement this interface or worry about it."
Dans le cas d'un upload de photo, il faut indiquer que la sérialisation ne concerne pas l'élément uploadé (uniquement le nom du fichier) pour ne pas avoir d'erreur. Dans l'absolu, il faudrait même ne serialiser que les éléments nécessaires à la sécurité, mais ça fonctionne très bien avec la méthode que je t'ai donné ;)
Super ! cette fois c'est claire ^^. MERCI !
Tu peux le faire via une méthode de ton entité, ou dans le getter de l'image... Mais c'est en dur dans ton code (même avec une constante).
Ou alors dans ton template twig via une condition, c'est la solution que je privilégie généralement, si un intégrateur a besoin de travailler sur ton projet, il comprend de suite ton code...
Merci du coup j'ai repris la methode de twig que je connaisais deja et qui fonctionne très bien.
Par contre j'ai de nouveau un souci :/
Je comprend pas pourquoi je n'arrive pas a Uploader de fichier pour mes articles.. J'ai aucun message d'erreur. Et pourtant rien ne s'enregistre dans ma base de donner ni dans ImageName ni dans Modified_at.
Je mets mon code dans le doute ou je suis passeé a cote de quelque chose.
Entity :
FormType :
Controller :