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 :

a quoi sert getName dans cette class ? [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut a quoi sert getName dans cette class ?
    Bonjour, voici un script que je en comprend pas trop

    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
     
    <?php
    // src/Sdz/BlogBundle/Form/ArticleType.php
     
    namespace Sdz\BlogBundle\Form;
     
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilder;
     
    class ArticleType extends AbstractType
    {
        public function buildForm(FormBuilder $builder, array $options)
        {
    	    $builder
                ->add('date')
                ->add('titre')
                ->add('contenu')
                ->add('auteur');
        }
     
        public function getName()
        {
            return 'sdz_blogbundle_articletype';
        }
    }
    dans la fonction buildForme, pourquoi met t'ont pas le type à ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    add->('auteur','text') //par exemple
    lorsque je crée une class ArticleType, netbeans m'indique qu'il manque la methode getName() .

    A quoi sert cette methode ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public function getName()
    {
     
    }
    je vous remercie d'avance pour la réponse

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    c'est le nom du type pour le service

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut
    cette info c'est pour juste l'afficher ? ou c'est un argument qui sera utiliser pour une objet ?

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    Au niveau de la sortie Html la méthode getName est utilisé pour générer les attributs name et id de tes champs de formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <input type="text" id="sdz_blogbundle_articletype_titre" name="sdz_blogbundle_articletype[titre]" />
    <textarea id="sdz_blogbundle_articletype_contenu" name="sdz_blogbundle_articletype[contenu]" />
    <input type="text" id="sdz_blogbundle_articletype_auteur" name="sdz_blogbundle_articletype[auteur]" />
    cela évite d'avoir des collisions entre deux id ou name identiques

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    builder->add->('auteur','text')
    //est équivalent à:
    builder->add('auteur', new Symfony\Component\Form\Extension\Core\Type\TextType())
    la différence est que en utilisant "text" on utilise un service (c-a-d une classe TextType ayant l'alias "text"), celui-ci est configuré via le container et on n'instancie pas un TextType à chaque fois:
    https://github.com/symfony/symfony/b...form.xml#LC125

    pour un champ texte, ça a peu d'importance, mais pour un champ "entity", le TypeEntity a besoin du service Doctrine qui est enregistré dans le container.

    [edit]

    dans la fonction buildForme, pourquoi met t'ont pas le type à ajouter
    lorsque l'on ne précise pas quel type on veut utiliser , un mécanisme interne au framework de formulaire se charge de déterminer quel est le type le plus approprié:
    http://symfony.com/doc/current/book/...-type-guessing
    là encore c'est un service qui fait le lien entre le mapping de Doctrine et le framework de formulaire (si on utilise doctrine)

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut
    merci beaucoup de ta réponse complète, donc je comprends mieux,
    si dans mon entité j'ai un code postal et que le metadata est un intéger, le formulaire sait qu'il va enregistrer un intéger donc pas besion de préciser le type . (moi est l'anglais )

    j'ai une autre question :

    je récupère un id via l'url est je réaffiche un contact
    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
     
            $contact = $this->getDoctrine()
                    ->getRepository('MyApp\ContactBundle\Entity\Contact')
                    ->find($id);
     
             $form = $this->createForm(new ContactType(), $contact);
     
            $formHandler = new ContactHandler($form, $this->get('request'), $this->getDoctrine()->getEntityManager());
     
            if ($formHandler->process()) {
                return $this->redirect($this->generateUrl('voir_contact', array('id' => $contact->getId())));
            }
     
     
            return $this->render('MyAppContactBundle:contact:ajouter.html.twig', array(
                        'form' => $form->createView(),
                    ));
    comment fait t'on pour faire en sorte qu'on ne puisse pas changer les champs du formulaire ? et ajouter un bouton modifier pour re permettre de modifier

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    j'ai un code postal et que le metadata est un intéger
    perso je ne mettrai pas un code postal en integer, ça n'a pas vocation a être calculé , et le fait que ce soit un integer ne signifie pas que c'est un code postal valide.

    comment fait t'on pour faire en sorte qu'on ne puisse pas changer les champs du formulaire ? et ajouter un bouton modifier pour re permettre de modifier
    le plus simple serait de rajouter l'attribut html "readonly" coté client et de supprimer ces attributs également via une action javascript ou bien d'avoir une vue "show" et une vue "edit".

    il y a une option read_only pour les champs de formulaires, ça veut dire qu'ils ne sont ni modifiables par l'utilisateur (attribut disable dans les chamsp de formulaire), ni traité coté serveur.
    on pourrait donc avoir un FormType avec une option dans le constructeur
    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
     
    //formType
    class MyType{
       protected $isReadOnly;
      public function __consruct($readOnly=false){
         $this->readonly=(bool)$readonly;
      }
      public function buildForm($builder,$options){
     
       $this->add('titre',null,array('read_only'=>$this->readonly));//en laissant le champ à null on laisse le framework deviner le type
        //etc...
      }
    }
    //controller
    public function editAction(){
      $isReadOnly=$this->getRequest()->getMethod()=='POST';//on considère que c'est un formulaire d'édition si la méthode est post
      $form=new MyType($isReadOnly);
      if($isReadOnly){
        //valider et traiter l'entité
      }
    //renvoyer le formulaire en lecture ou non (selon la méthode http utilisé)
    }
     
    //code javascript avec jQuery
    $(function(){
      $('button.make_form_editable').click(function(){
        $('form').find('input,select,textarea').removeAttribute('disable');
      });
    });

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

Discussions similaires

  1. Debutant: à quoi sert * { blabla; } dans css
    Par mouhssine84 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 30/04/2010, 13h38
  2. GetDefinitionbyName probleme import dans cette classe
    Par italya dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 26/07/2009, 15h04
  3. [1.x] A quoi sert phing dans symfony
    Par cornnery dans le forum Symfony
    Réponses: 1
    Dernier message: 10/03/2008, 16h56
  4. A quoi sert le ~ dans latex
    Par Fox213 dans le forum Mise en forme
    Réponses: 2
    Dernier message: 13/12/2007, 18h10
  5. A quoi sert "AuthGroupFile" dans .htaccess ?
    Par Christophe Charron dans le forum Apache
    Réponses: 4
    Dernier message: 14/09/2006, 15h59

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