IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Editer un fichier et supprimer l'ancien [3.x]


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Homme Profil pro
    .
    Inscrit en
    Avril 2016
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Avril 2016
    Messages : 108
    Points : 49
    Points
    49
    Par défaut Editer un fichier et supprimer l'ancien
    Bonjour,

    Je dispose de deux entités Category et Product ou j'upload des images, du coup je rencontre deux problèmes, quand j'édite une de ces entités je me retrouve à chaque fois avec le champs file : aucun fichier sélectionné et je suis obligé de le remettre a chaque coup, même dans le cas ou je veux changer un autre champs.
    Mon deuxième problème est qu'à la modif d'une image, l'ancienne n'est pas supprimé, je cherche du coup une réponse pour ce probleme si quelqu'un sait !

    J'utilise l'upload de base de symfony : https://symfony.com/doc/current/cont...load_file.html avec les eventListner !

    Cordialement,

  2. #2
    Membre actif Avatar de jisig
    Homme Profil pro
    null
    Inscrit en
    Avril 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Indonésie

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Avril 2014
    Messages : 146
    Points : 273
    Points
    273
    Par défaut
    ton input file ne doit pas être required (voir required dans les attributs html)

    sinon un bout de code pour effacer un fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
          $entity->setFile(''); //ici pour vider le nom de mon fichier dans mon entité
          unlink($this->getParameter('le_chemin_du_fichier_que_tu_peux_définir_dans_paramaters.yml').'/'. $files['name']); //ici je supprime le fichier 
          $this->getDoctrine()->getManager()->flush(); //sauvegarder dans la db

  3. #3
    Membre du Club
    Homme Profil pro
    .
    Inscrit en
    Avril 2016
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Avril 2016
    Messages : 108
    Points : 49
    Points
    49
    Par défaut
    En fait apres plusieurs recherches il me faut des groupes de validations, ce n'est pas l'attribut required le problème, quand je crée un fichier j'ai un Assert NotBlank car il est obligatoire à la création.

    Mais à l'edit j'aimerai pouvoir rendre ce champs facultatif, et donc garder l'ancienne image si il veut simplement changer un nom.

    Du coup, je dois rentrer une image pour la moindre modif, sachant qu'en plus je genere un nom unique donc la meme image peut etre présente plusiseurs fois dans mon dossier image, et je ne supprime pas l'ancienne donc il y a vite bcp (trop) de fichier et surtout inutile.

    Du coup, je suppose que pour supprimer l'ancien fichier je dois faire ca dans le prePersist ou preUpload?

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2003
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2003
    Messages : 307
    Points : 378
    Points
    378
    Par défaut
    Soit tu utilises l'event form pour rendre ton formulaire plus dynamique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if (!$product || null === $product->getId()) {
                $form->add('image', FileType::class, 
    ['required']=>false);        }
    else{
    //required => true
    }
    tu as un bon exemple ici

    https://symfony.com/doc/current/form...ification.html

    Soit tu crée un ProductEditType en héritant de ton ProductType

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    class ProductEditType extends AbstractType
    {
        /**
         * @param FormBuilderInterface $builder
         * @param array $options
         */
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add("image",FileType, ['required'=>false]);
        }
     
        public function getParent()
        {
            return ProductType::class;
        }
    https://symfony.com/doc/current/form...the-field-type

    Pour effacer l'ancienne image tu dois le faire manuellement comme jisig l'indique

  5. #5
    Membre du Club
    Homme Profil pro
    .
    Inscrit en
    Avril 2016
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Avril 2016
    Messages : 108
    Points : 49
    Points
    49
    Par défaut
    Ca m'a l'air pas mal ! Je vais voir ca, merci !!
    Mais juste pour en finir sur ces groupes de validations, du coup ca s'utilise dans ces cas la aussi ou pas ?

    Cordialement,

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2003
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2003
    Messages : 307
    Points : 378
    Points
    378
    Par défaut
    Je pense que ton not blank ne sert a rien ici. Le required fait le boulot. Sinon mets ta contrainte sur le form et pas l entite

    http://symfony.com/doc/current/valid...n-form-classes

  7. #7
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2008
    Messages : 252
    Points : 358
    Points
    358
    Par défaut
    Non le required NE FAIT PAS le boulot, il faut forcément passer par une validation coté serveur pour être sur du résultat. Donc en passant par les contraintes et les groupes de validation si nécessaire.

  8. #8
    Membre du Club
    Homme Profil pro
    .
    Inscrit en
    Avril 2016
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Avril 2016
    Messages : 108
    Points : 49
    Points
    49
    Par défaut
    Pour l'instant en passant par ce système ça a en tout cas réglé mon problème.

    J'ai enlevé le NotBlank et mis le required si l'entité est nouvelle, pour les groupes de validations encore une fois c'est ce que je voulais mettre en place à la base sans y parvenir, d’où mon premier post donc si tu veux m'expliquer ou je me suis loupé je suis preneur aussi.

  9. #9
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2003
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2003
    Messages : 307
    Points : 378
    Points
    378
    Par défaut
    Tu as l'exemple dans le lien que je t'ai donné

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $builder
            ->add('myField', TextType::class, array(
                'required' => true,
                'constraints' => array(new Length(array('min' => 3)))
            ))
        ;

  10. #10
    Membre du Club
    Homme Profil pro
    .
    Inscrit en
    Avril 2016
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Avril 2016
    Messages : 108
    Points : 49
    Points
    49
    Par défaut
    Merci à tous !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [FTP] Editer des fichiers distants
    Par bigtof dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 17/08/2006, 01h28
  2. [VB6] API CreatePen > faut'il supprimer l'ancien pen ?
    Par hpfx dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 21/04/2006, 17h09
  3. [XML-JSP] Editer un fichier XML
    Par sempire dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 24/08/2005, 23h24
  4. Manipulation de fichier (copier, supprimer, déplacer)
    Par Guigui_ dans le forum Général Python
    Réponses: 1
    Dernier message: 21/10/2004, 11h26
  5. Ecrire dans un fichier sans supprimer le reste
    Par koan_sabian dans le forum Linux
    Réponses: 4
    Dernier message: 20/02/2003, 16h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo