Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/04/2011, 11h37   #1
Nouveau Membre du Club
 
Inscription : décembre 2009
Messages : 122
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 122
Points : 33
Points : 33
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?
Stefounette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 16h58   #2
Nouveau Membre du Club
 
Inscription : décembre 2009
Messages : 122
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 122
Points : 33
Points : 33
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?
Stefounette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 18h43   #3
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
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.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 10h44   #4
Nouveau Membre du Club
 
Inscription : décembre 2009
Messages : 122
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 122
Points : 33
Points : 33
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 :
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 :'(?
Stefounette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 11h21   #5
Nouveau Membre du Club
 
Inscription : décembre 2009
Messages : 122
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 122
Points : 33
Points : 33
J'essai de récupérer les données du formulaire ainsi:
Code :
 $this->getRequestParameter('ordre');
ou bien comme ça:
Code :
$request->getParameter('ordre');
mais ça ne marche pas .
Stefounette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 18h18   #6
Nouveau Membre du Club
 
Inscription : décembre 2009
Messages : 122
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 122
Points : 33
Points : 33
Bon alors finalement je récupère les informations entrées par l'utilisateur dans le formulaire en faisant comme ça :
Code :
$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?
Stefounette est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h08.


 
 
 
 
Partenaires

Hébergement Web