J'utilise l'article de Cookbook de Symfony.com pour implémenter une option de téléchargement de fichier pour les images. P>
Maintenant, je veux charger d'autres images sur l'entité. P>
La stratégie par défaut pour l'édition est la suivante: 1. Fetch hors de DB 2. Injectez-vous en forme 3. persister p>
D'une manière ou d'une autre, cette stratégie ne fonctionne plus lorsque vous utilisez les téléchargements de fichiers (la doctrine n'exécute pas les événements) p>
Que pourrais-je faire d'autre pour rendre les articles avec une image modifiables? P>
3 Réponses :
Le livre de recettes est ne pas gérer les mises à jour strong>, en particulier dans le cas où seul le fichier change. P>
Dans ce cas, l'événement PreUpDate CODE> n'est pas déclenché, vous devez donc déclencher une entité
$-> preupload () code> manuellement avant le
$ em-> Persist ($ entité) code>, de sorte que le téléchargement de fichier est traité dans tout cas (Preupload alternera
$ entity-> chemin code> de sorte que le persistant se produise) p>
Salut, tu es à droite. Lorsque aucun champ n'est mis à jour, les événements de callback de vie ne sont pas tirés :)
Si vous utilisez le KNP DoctrineExtensions, vous pouvez utiliser TIMESTAMBLABLABLE SUR L'ENTITY PRENANT LA LOGIC DE LIBLE DE FICHIER ET UTILISER $ ENTERY-> UPTATEMESTAMESTAMESTAMPS (); avant $ em-> persist () de sorte qu'il aura mis à jour les champs factices dont vous avez besoin;)
Si vous ne changez que le champ de téléchargement, le cycle de vie n'exécute pas la méthode de téléchargement, dans le livre de recettes est signalé la solution dans une zone de devis ci-dessous:
Les rappels pré-rembourser et postupdate ne sont déclenchés que s'il y a Un changement dans l'une des zones de l'entité qui sont persistés. Ça signifie que, par défaut, si vous ne modifiez que la propriété $ Fichier, ces événements ne sera pas déclenché, car la propriété elle-même n'est pas directement persisté via la doctrine. Une solution serait d'utiliser un champ mis à jour Cela a persisté à la doctrine et de le modifier manuellement lors de la modification le fichier. p> blockQuote>
Ajoutez un champ factice pour mettre à jour dans le contrôleur avant l'événement persist, comme suggère par cette Duscussion: p>
HTTTPS://github.com/symfony/symfony-docs/pull/564 p>
xxx pré> p>
J'ai eu une situation similaire. J'essaie de modifier l'enregistrement existant dans la base de données avec le chemin du fichier. Lorsque je modifie l'enregistrement, je dois télécharger un nouveau fichier, ce qui n'est pas confortable pour les utilisateurs. Dans ma solution, j'utilise un fichier TMP variable pour le nom de fichier de fichier et de fichier variable. Toutes les opérations nécessaires que j'ai fabriquées en action Edit classe. P>
Exemple complet Classe d'action en lien ci-dessous p>
https://github.com/marekz / php_examples / wiki / symfony-how-edit-edit-forme-formulaire p>