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 :

symfony 4 formulaire [4.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Par défaut symfony 4 formulaire
    Bonjour,

    J'ai deux soucis concernant un formulaire,

    PB 2: L'un de mes problèmes concerne les champs files

    PB 1: et l'autre concerne un champ liste dans lequel je mets des couleurs (enregistré en bdd) , voici une partie du code de mon formBuilder :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
           ->add('joindreDemandeTravaux', FileType::class, array('data_class' => null,'required' => false))
                ->add('joindreImage', FileType::class, array('data_class' => null,'required' => false))
     
                ->add('autreCouleurPrecisez', entityType::Class, [
                        'class' => Couleur::class,
                        'choice_label' => 'nomCouleur',
                        'multiple' => 'false',
                    ])
    En fait pour le champ "autreCouleurPrecisez" , j'ai bien l'affichage de mes couleurs dans mon formulaire mais en revanche quand je fais appel pour regarder ce qu'il a stocké en bdd j'ai ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AutreCouleurPrecisez	Doctrine\Common\Collections\ArrayCollection@000000000cea648b0000000035781c2c
    En fait je récupère l'adresse de la collection...
    Sauf que je m'en tape un peu j'aimerais avoir ma couleur sélectionnée


    PB 2 : Champ files

    Lorsque je clique sur mon champ files j'ai l'explorer qui s'ouvre jusque là tout va bien, ensuite je sélectionne un fichier, je n'ai pas le chemin qui s'affiche dans le champ comme ça javais rien sélectionné. Pourtant le fichier est bien sélectionné car à l'enregistrement le fichier tmp est stocké en bdd. Comment je peux avoir le chemin qui s'affiche dans mon champ files à la sélection du fichier ?

  2. #2
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Par défaut
    Re, l'ami,

    il n'y a que toi sur le forum symfony ? lol enfin :

    Pour l'upload de fichier j'ai fait ça dans mon controller :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    /**
         * @Route("/member/newCommande", name="commande_new", methods={"GET","POST"})
         * @param Request $request
         * @param FileUploader $fileUploader
         * @return Response
         */
        public function new(Request $request, FileUploader $fileUploader): Response
        {
            $commande = new Commande();
            $form = $this->createForm(CommandeType::class, $commande);
            $form->handleRequest($request);
     
            if ($form->isSubmitted() && $form->isValid()) {
                $file_pdf = $commande->getJoindreDemandeTravaux();
                $file_image = $commande->getJoindreImage();
     
                $filenamepdf = $fileUploader->upload($file_pdf);
                $filenameimage = $fileUploader->upload($file_image);
     
                $commande->setJoindreDemandeTravaux($filenamepdf);
                $commande->setJoindreDemandeTravaux($filenameimage);
     
                $entityManager = $this->getDoctrine()->getManager();
                $entityManager->persist($commande);
                $entityManager->flush();
     
                return $this->redirectToRoute('mes_commandes_show');
            }
     
            return $this->render('commande/new.html.twig', [
                'commande' => $commande,
                'form' => $form->createView(),
            ]);
        }
    J'ai aussi créé un service upload :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    <?php
     
     
    namespace App\Service;
     
     
    use Symfony\Component\HttpFoundation\File\Exception\FileException;
    use Symfony\Component\HttpFoundation\File\UploadedFile;
     
    class FileUploader
    {
        private $targetDirectory;
     
        public function __construct($targetDirectory)
        {
            $this->targetDirectory = $targetDirectory;
        }
     
        public function upload(UploadedFile $file)
        {
            $fileName = md5(uniqid()).'.'.$file->guessExtension();
     
            try {
                $file->move($this->getTargetDirectory(), $fileName);
            } catch (FileException $e) {
                // ... handle exception if something happens during file upload
                $e->getTraceAsString();
            }
     
            return $fileName;
        }
     
        public function getTargetDirectory()
        {
            return $this->targetDirectory;
        }
    }
    Dans mon fichier services.yaml j'ai déclaré un parameters "doc_travaux_pdf" et "App/Service/FileUploader" :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    # This file is the entry point to configure your own services.
    # Files in the packages/ subdirectory configure your dependencies.
     
    # Put parameters here that don't need to change on each machine where the app is deployed
    # https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
    parameters:
        locale: 'fr'
        doc_travaux_pdf: '%kernel.project_dir%/public/uploads/doc_travaux'
     
    services:
        # default configuration for services in *this* file
        _defaults:
            autowire: true      # Automatically injects dependencies in your services.
            autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
     
        App\Service\FileUploader:
            arguments:
                $targetDirectory: '%doc_travaux_pdf%'
     
        # makes classes in src/ available to be used as services
        # this creates a service per class whose id is the fully-qualified class name
        App\:
            resource: '../src/*'
            exclude: '../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}'
     
        # controllers are imported separately to make sure services can be injected
        # as action arguments even if you don't extend any base controller class
        App\Controller\:
            resource: '../src/Controller'
            tags: ['controller.service_arguments']
     
        # add more service definitions when explicit configuration is needed
        # please note that last definitions always *replace* previous ones
    Cela dit j'ai cette erreur que je ne comprends pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cannot resolve argument $fileUploader of "App\Controller\CommandeController::new()": Cannot autowire service "App\Service\FileUploader": argument "$targetDirectory" of method "__construct()" has no type-hint, you should configure its value explicitly.
    D'après l'erreur je comprends qu'il ne pige pas mon argument $fileUploader mais j'ai bien mon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    use App\Service\FileUploader;

    ça fait 2h30 que je galaire... aide moi plz

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Par défaut
    En fait je viens de trouver d'où ça coince c'est le constructeur de mon service FileUploader avec mon argument $targetDirectory mais je ne sais pas pourquoi, ni comment lui affecter une valeur :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    <?php
     
     
    namespace App\Service;
     
     
    use Symfony\Component\HttpFoundation\File\Exception\FileException;
    use Symfony\Component\HttpFoundation\File\UploadedFile;
     
    class FileUploader
    {
        private $targetDirectory;
     
        public function __construct($targetDirectory)
        {
            $this->targetDirectory = $targetDirectory;
        }
     
        public function upload(UploadedFile $file)
        {
            $fileName = md5(uniqid()).'.'.$file->guessExtension();
     
            try {
                $file->move($this->getTargetDirectory(), $fileName);
            } catch (FileException $e) {
                // ... handle exception if something happens during file upload
                $e->getTraceAsString();
            }
     
            return $fileName;
        }
     
        public function getTargetDirectory()
        {
            return $this->targetDirectory;
        }
    }

  5. #5
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    il n'y a pas de $ dans un fichier yaml
    donc il a du mal à le passer au constructeur !

    $targetDirectory

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Par défaut
    oups

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 07/05/2017, 17h25
  2. [MySQL] probleme champ formulaire non pris en compte
    Par stefanelle dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/08/2009, 11h53
  3. [CSS]Probleme de formulaire entre IE et Firefox
    Par Steph82 dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 17/02/2005, 18h34
  4. Probleme de formulaire d'upload
    Par Oberown dans le forum ASP
    Réponses: 5
    Dernier message: 26/10/2004, 14h00
  5. [struts] probleme champs dynamiques
    Par rocco dans le forum Struts 1
    Réponses: 28
    Dernier message: 07/06/2004, 21h26

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