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 :

Question d'un débutant


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 181
    Points : 47
    Points
    47
    Par défaut Question d'un débutant
    Bonjour, comme le titre le précise, je débute avec Symfony 2. J'ai lu la documentation de Symfony et des tutoriels mais il y a des choses que je ne comprends pas.
    Je vais essayé d'expliquer mon problème clairement. Voilà, je possède 2 classes créées en PHP 5 dans 2 fichiers différents (biblio.php et livre.php par exemple). Par la suite j'ai des fichiers php comprenant des fonctions de calcul. Je souhaiterais savoir comment récupérer les variables inscrites dans mon formulaire et les utiliser dans mes classes et mes fonctions.

    Je prends un exemple un peu plus explicite pour cela.
    J'ai un formulaire dans lequel on rentre le nom, l'auteur et l'éditeur d'un livre. Je souhaite mettre ses variables dans un objet Livre puis passer cet objet dans une fonction ou je vais calculer la longueur du nom et l'insérer dans mon objet. Ensuite je souhaiterais afficher la longueur du nom en utilisant une fonction public de ma classe Livre.
    Comment pourrais-je faire cela et ou placer ces fichiers ?
    Merci d'avance.

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Bonjour,

    Il faudrait aussi que tu précises quel est ton niveau en PHP et en POO. Symfony n'est pas vraiment fait pour les débutants en PHP et/ou en POO.

    Dans un workflow typique de symfony, ton cas se traite en créant 2 entités (classes) Biblio et Livre, puis en créant deux classes formType (BiblioType et LivreType) qui te permettront de générer un formulaire à partir des entités, puis de créer ce formulaire dans ton contrôleur, qui se charge de le transmetter à une view pour l'afficher, de récupérer les valeurs transmises lorsqu'il est soumis et ensuite d'appeler les différents objets/méthodes qui se chargeront du traitement de ces valeurs.

    Essaie de suivre le tutorial Jobeet pour symfony2, il te montre pas-à-pas comment réaliser en pratique ces différentes étapes.

  3. #3
    Membre expert
    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
    Points : 3 004
    Points
    3 004
    Par défaut
    et bien sur, utiliser les services pour faire appels à tes classes php externe de fonction de calcul.

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 181
    Points : 47
    Points
    47
    Par défaut
    Merci de vous intéresser à mes questions. Je ne suis pas un débutant en PHP mais je me suis mis à la POO en php depuis peu de temps par contre je connais la POO en C.
    Je n'ai pas compris ce que tu essaies de m'expliquer Tsilefy. Pourrais tu me donner un exemple un peu plus concret (sans forcément répondre à ce que je souhaites faire bien entendu) pour que je puisse comprendre le système des passages de variables que je souhaite réaliser ?
    Merci d'avance.

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    C'est pour ça que je te conseille de chercher le tutoriel jobeet, car il te donnera en détail tous les éléments nécessaires. Sinon, la documentation le décrit aussi : http://symfony.com/fr/doc/current/book/forms.html

    Pour schématiser (code non testé donc il peut y avoir des fautes de frappe), supposons que tu aies une classe Book
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    namespace My\Namespace\Entity
    class Book
    {
       protected $author;
       protected $editor;
       protected $publisher;
       protected $author_name_length;
     
       //plus tous les getters et setters nécessaires
    }
    Il faut ensuite créer le générateur de formulaire associé à cette classe (tu peux t'en passer, mais c'est recommandé):
    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
     
    namespace My\Namespace\Form
     
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilderInterface;
     
    class BookType extends AbstractType
    {
       public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('author')
                ->add('editor')
                ->add('publisher')
                ->add('save', 'submit');
        }
     
        public function getName()
        {
            return 'book';
        }
     
    }
    Et maintenant dans ton controlleur,
    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
     
    namespace My\Namespace\Controller
    //ajouter ici les déclarations use typique des contrôleurs...
     
    use My\Namespace\Form\BookType;
    class BookController extends Controller
    {
          public function addAction(Request $request)
       {
               //tu crées un objet book
               $book = new Book;
     
               //tu crées un formulaires de type book et l'associe à ton objet book
               $form = $this->createForm(new BookType, $book);
     
               //ce code s'exécute uniquement après soumission du forumulaire
     
              //$form essaie de créer un objet Book valide à partir des variables envoyées par le formulaire
              $form->handleRequest($request);
     
    //si unobjet Book est correctement formé, tu peux maintenant faire tes opérations
              if($form->isValid()) {
     
                //tu récupères ta classe pour traiter le nom (qu'on appelera par exemple NameHandler) depuis le conteneur de services (il faudra du coup que tu regarde aussi ce qu'est le conteneur de services)
                    $name_handler = $this->container->get('namehandler');
     
                //tu peux aussi le faire à la sauvage en instanciant directement $name_handler avec
                //$name_handler = new My\Namespace\NameHandler();
                //c'est plus court mais je ne recommande pas, c'est de la mauvaise programmation. Le fait d'avoir accès à tout le conteneur de services depuis le contrôleur me dérange déjà suffisamment!
     
                //tu fais ensuite ton opération, ex calculer la longueur du nom
                   $name_length = $name_handler->calculateLength($book->getAuthor());
               //tu insères la longueur dans ton objet $book
                   $book->setAuthorNameLength($name_length);
     
    //et ensuite tu rediriges vers une autre page, comme il est de bonne pratique pour les requêtes POST. C'est dans cette page que tu afficheras la longueur du nom par exemple.
     
                    return $this->redirect($this->generateUrl('add_success'));
            }
     
           //lorsque le formulaire s'affiche au départ (avant submission), on envoie l'objet $form à une vue, qui se chargera de l'afficher.
          return $this->render('MyNamespace:Book:add.html.twig', ['form' => $form->createView()]);  
       }
     
    }
    Et enfin dans ton template twig, tu affiches le forumlaire en appelant l'objet $form transmis plus haut.
    Il s'agit là des étapes de base pour le traitement des formes, sous forme raccourcie évidement. Dans la doc officiel et dans Jobeet, tu trouveras tous les détails pour correctement appliquer ces étapes.

Discussions similaires

  1. Question d'archi-débutant :VB6 vers VB.NET premier problème
    Par zedude33 dans le forum Windows Forms
    Réponses: 9
    Dernier message: 06/02/2007, 15h29
  2. Petite question d'un débutant en C++
    Par faboulous dans le forum C++
    Réponses: 6
    Dernier message: 04/08/2006, 15h43
  3. Réponses: 4
    Dernier message: 06/07/2006, 17h14
  4. Question d'un débutant sur Access
    Par RV80 dans le forum Access
    Réponses: 8
    Dernier message: 12/06/2006, 12h32
  5. question d'un débutant...
    Par chti_juanito dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 01/06/2005, 10h29

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