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 :

Formulaire crud d'administration


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 122
    Par défaut Formulaire crud d'administration
    Bonjour,

    Je suis débutante en Symfony et je prends en cours de route un projet déjà à moitié construit donc j'ai un peu du mal.

    J'ai un module photo dans lequel se situe un formulaire. Ce module se situe dans mon backend qui est, en fait, d'après ce que j'ai compris, un crud administration.

    Ce formulaire me permet d'uploader une image en lui attribuant un titre, en la rattachant à une expo déjà créée...

    Je voudrais faire plusieurs choses avec ce formulaire:
    - Je voudrais modifier le nom du fichier uploadé pour lui attribué son identifiant dans la base de données
    - Je voudrais créer un dossier du nom de l'exposition à laquelle est rattaché l'image si celui-ci n'est pas déjà créer et mettre mon image dedans.
    - Je voudrais pouvoir uploader mon image dans un autre dossier que le dossier 'upload'
    - Afin à la soumission du formulaire je voudrais effectué un traitement sur l'image uploadée (création d'une miniature)

    Je n'arrive pas à faire tout ca. J'ai tenté de bidouiller le fichier 'generator.yml' mais je ne sais pas trop comment m'y prendre, j'ai tenté d'effectuer le traitement de mon image en ajoutant une fonction dans le fichier action.class.php de mon module, et j'ai tenté de modifier le nom du fichier uploadé en surchargeant la fonction "generateNomFichierFilename" mais rien ne marche.

    Pouvez-vous m'aider, au moins à comprendre le fonctionnement général du crud d'administration, s'il vous plait?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 122
    Par défaut
    Dans mon module 'photo' le formulaire est créé pas Symfony. Je n'ai pas de template à ma disposition.

    Comment puis-je modifier le form_tag() pour qu'il exécute la fonction que je désire?

  3. #3
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Tu devrais trouver presque 90% des réponses dans ce tutoriel.

    Tu n'as pas besoins du template pour ce que tu veux faire. Lis le tutoriel et tout sera plus simple.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 122
    Par défaut
    J'ai lu (et relu) ce tutoriel mais j'ai encore des problèmes.

    J'ai pensé, afin d’exécuter ma fonction permettant de créer des miniatures, à faire ça:

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    <?php
    
    require_once dirname(__FILE__).'/../lib/photoGeneratorConfiguration.class.php';
    require_once dirname(__FILE__).'/../lib/photoGeneratorHelper.class.php';
    
    /**
     * photo actions.
     *
     */
    class photoActions extends autoPhotoActions
    {
        public function executeNew(sfWebRequest $request){
           $this->form = $this->configuration->getForm();
           $this->photo = $this->form->getObject();
        }
    
        public function executeCreate(sfWebRequest $request){
            $this->form = $this->configuration->getForm();
            $this->photo = $this->form->getObject();
            $this->processForm($request, $this->form);
            $this->setTemplate('new');
        }
    
        public function executeEdit(sfWebRequest $request){
            $this->photo = $this->getRoute()->getObject();
            $this->form = $this->configuration->getForm($this->photo);
        }
    
        public function executeUpdate(sfWebRequest $request){
            $this->photo = $this->getRoute()->getObject();
            $this->form = $this->configuration->getForm($this->photo);
            $this->processForm($request, $this->form);
            $this->setTemplate('edit');
        }
    
        public function executeDelete(sfWebRequest $request){
            $request->checkCSRFProtection();
    
            $photo = $this->getRoute()->getObject();
            $photo->delete();
            $this->redirect('@photo');
        }
    
        public function processForm(sfWebRequest $request, sfForm $form ){
            // on lie le formulaire (méthode bind()) avec les valeur soumises par
            // l'utilisateur
            $form->bind(
              $request->getParameter($form->getName()),
              $request->getFiles($form->getName())
            );
    
            $this->createMiniature($request, $form);
    
            if($form->isValid())
            {
                $notice = $form->getObject()->isNew() ? 'Les informations ont été ajoutées avec succès' : 'Les informations ont été modifiées avec succès';
    
                try {
                    $photo = $form->save();
                  } catch (Doctrine_Validator_Exception $e) {
    
                    $errorStack = $form->getObject()->getErrorStack();
    
                    $message = get_class($form->getObject()) . ' has ' . count($errorStack) . " field" . (count($errorStack) > 1 ?  's' : null) . " with validation errors: ";
                    foreach ($errorStack as $field => $errors) {
                        $message .= "$field (" . implode(", ", $errors) . "), ";
                    }
                    $message = trim($message, ', ');
    
                    $this->getUser()->setFlash('error', $message);
                    return sfView::SUCCESS;
                  }
    
                  $this->dispatcher->notify(new sfEvent($this, 'admin.save_object', array('object' => $photo)));
    
                  if ($request->hasParameter('_save_and_add'))
                  {
                    $this->getUser()->setFlash('notice', $notice.' Vous pouvez ajouter un nouvel enregistrement');
                    $this->redirect('@photo_new');
                  }
                  else
                  {
                    $this->getUser()->setFlash('notice', $notice);
                    $this->redirect(array('sf_route' => 'photo_edit', 'sf_subject' => $photo));
                  }
            }
            else
            {
              $this->getUser()->setFlash('error', 'Des erreurs ont empêcher la sauvegarde des informations' , false);
            }
        }
    
        public function createMiniature(sfWebRequest $request, sfForm $form ){
            [...]
        }
    
    }
    J'appelle la fonction que je souhaite exécuter dans la fonction "processForm". Je ne sais pas si c'est une bonne façon de faire, mais j'ai toujours un gros problème que je n'arrive pas à résoudre: je n'arrive pas à récupérer les données soumises dans le formulaire par l'utilisateur.

    Pouvez-vous m'aider :'(?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 122
    Par défaut
    J'essai de récupérer les données du formulaire ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $this->getRequestParameter('ordre');
    ou bien comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $request->getParameter('ordre');
    mais ça ne marche pas .

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 122
    Par défaut
    Bon alors finalement je récupère les informations entrées par l'utilisateur dans le formulaire en faisant comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $expo = $request->getPostParameter('photo[ordre]');
    .

    Par contre, j'aimerais récupérer le nom (avec son extension) du fichier créer par symfony lors de l'upload, comment puis-je faire?

Discussions similaires

  1. Formulaire embarqué avec CRUD
    Par sahar.ds dans le forum Play!
    Réponses: 2
    Dernier message: 04/04/2012, 19h49
  2. Réponses: 31
    Dernier message: 09/11/2011, 18h19
  3. Réponses: 3
    Dernier message: 15/10/2009, 17h23
  4. Réponses: 22
    Dernier message: 27/06/2006, 16h42
  5. Réponses: 3
    Dernier message: 09/06/2006, 08h29

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