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 :

Form filter et embedded form [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 33
    Par défaut Form filter et embedded form
    Bonjour,

    Grand débutant en symfony je cherche à utiliser les form filter généré par le framework.

    J'ai un objet personne qui est en relation avec un objet candidature j'arrive a utiliser le personneformfilter dans mon appplication frontend par contre lorsque je veux embarquer dans cette form la formfilter de mon objet candidature c'est la que ca se complique

    donc dans mon objet personneFormFilter j'ai rajouté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //PersonneFormFilter.class.php
     //On embarque la forme pour les candidature et planning :
        $this->embedForm('candidature', new CandidatureFormFilter());
    Du coup j'ai bien tout ce qu'il faut à l'affichage mais je ne sais pas comment traiter les filtres dans mon action :

    j'ai essayé ca :

    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
    //Fichier action.class.php
    class personneActions extends sfActions
    {
     
      public function executeFilter(sfWebRequest $request)
      {
     
        // RESET
        if ($request->hasParameter('_reset'))
        {
          exit('reset');
          $this->setFilters(array()); //reset, filtre vide
          $this->forward('personne','index');
        }
     
        $this->filters = new PersonneFormFilter($this->getFilters());
     
        $this->filters->bind($request->getParameter($this->filters->getName()));
     
        if ($this->filters->isValid())
        {
          $this->setFilters($this->filters->getValues());
          $this->forward('personne','index');
        }
     
        $this->setTemplate('index');
      }
     
      protected function getFilters()
      {
        return $this->getUser()->getAttribute('personne.filters', array());
      }
      protected function setFilters(array $filters)
      {
        return $this->getUser()->setAttribute('personne.filters', $filters);
      }
     
      protected function buildQuery($q)
      {
        if(!isset($this->filters))
          $this->filters = $this->getFilters();
     
        $this->filters->setQuery($q);
     
        $query = $this->filters->buildQuery($this->getFilters());
     
        return $query;
     
      }
     
      public function executeIndex(sfWebRequest $request)
      {
     
        $this->filters = new PersonneFormFilter($this->getFilters());
     
        $baseQuery = Doctrine::getTable('personne')
          ->createQuery('r')
          ->orderBy('nom');
     
        $query = $this->buildQuery($baseQuery);
     
         $this->pager = new sfDoctrinePager('personne',sfConfig::get('app_max_personne_on_list_homepage'));
            $this->pager->setQuery($query);
            $this->pager->setPage($request->getParameter('page', 1));
            $this->pager->init(); 
     
      }
    .
    .
    .
    .....
    Mais avec ce code je n'ai pas d'erreur mais aucun filtre ne s'applique il exécute toujours ma requête de base (a savoir select * from personne order by nom). Je ne sais pas trop par quel bout prendre le problème j'imagine que je dois lui dire quelque part comment gérer la relation entre mon objet personne et mon objet candidature lors de la construction de la requête pour le filtrage ... ?

    Auriez vous une idée ?

    D'avance merci.

  2. #2
    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
    Les formFilters ne sont pas conçu pour être embarque (embed).

    Je ne pense pas que cela puisse marcher (en fait, cela ne devrait même pas être possible. J'ai beaucoup de mal à imaginer l'intérêt que pourrait avoir un formFilter embarqué.

    Ma question est : sans parler technique, que veux-tu faire exactement, on verra les moyens à mettre en œuvre ensuite.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 33
    Par défaut
    Bonjour,

    tout d'abord merci de t'intéresser à mon problème.

    Donc pour schématiser j'ai un objet personne(nom, prenom, commune, adresse ....) et un objet candidature.

    Une candidature correspond a une seul personne.

    Dans mon objet candidature j'ai des informations de disponibilité pour l'année en cours par rapport a des tranches horaire prédéfinies(simplifiant en disant dispo matin/apres midi oui ou non semaine et week end).

    J'ai personnalisé mes formfilter pour obtenir l'affichage souhaité.

    Maintenant je voudrais pouvoir filtrer sur tout ces critères en même temps c'est pourquoi j'ai voulu essayer les embedded form. Mais peut etre y a -til plus simple ?

  4. #4
    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
    Je ne dois pas être doué, je ne comprend absolument pas ce que tu veux faire.

    Niveau application tu as (simplifié) deux tables (j'aime pas les simplifications) : une table user et une table candidatures. Ces tables sont liées suivant un schéma 1-n (un user a de 0 à infini candidatures, 1 candidature à toujours 1 et 1 seul user).

    Après, tu fais un formulaire pour saisir les user.

    Puis un formulaire pour saisir les candidatures du user.

    Où veux-tu mettre des filtres ? Et à quoi veux-tu lier le formFilter (ce qui n'est pas gérable, pas conçu pour) ?

    Essaye d'écrire l'histoire de Monsieur Durant qui veut poser des (plusieurs) candidatures et celle de Monsieur Dupond qui veut consulter des candidatures. Ceci n'est pas une blague, mais un moyen de mieux cerner ce qui devrait ce passer.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 33
    Par défaut
    Bonjour,

    Donc je n'est pas trop simplifié mon schema mais seulement mon explication .

    En fait ma table personne est liée à une table formation, un table niveau, une table commune, une table véhicule et une table statut(étudiant, employé....). et ma table candidature à une table année.

    Donc ma formfilter personne permet de filtrer sur tout ca(formation, diplôme, statut, nom, prenom...)

    Par contre j'ai effectivement un peu simplifié ma table candidature en regroupant les disponibilités par période dans la table(je l'ai d'ailleurs fait pour de mauvaise raison mais c'est pour rendre ma découverte de symfony plus abordable)

    Donc dans ma formFilter candidature je peux filtrer sur les dispos de la personne si elle est présente le lundi matin, le lundi apresmidi le mardi matin ..... tout ca sous forme de mini planning.

    Ca c'est pour la partie filtre.

    Pour la partie saisie il y a un individu qui soit créer une nouvelle personne avec une nouvelle candidature pour l'année en cours soit recherche une personne dans la base et crée uniquement la candidature pour l'année en cours.
    Toute les info se font sur la même interface/page(les infos d'état civil de formation .... ainsi que les infos de dispos liées à la candidature). J'ai d'ailleurs personnaliser ma form candidature pour quel apparaisse sous forme de mini planning avec cases à cocher.

    Ensuite cette même personne suite à une demande doit pouvoir rechercher les personnes susceptibles d'être dispo et cette recheche je souhaite que tout les critères puissent encore une fois être saisie sur la même page et c'est pour cela que je voulais essayer d'utiliser la fonctionnalité d'embedded form. Mais encore une fois peut etre existe il une méthode plus simple mais vu que j'avais préparé mes deux formfilter au bon format j'imaginais pouvoir les réutiliser ensemble.

    J'espère avoir été un peu plus clair et encore une fois merci pour tes conseils.

  6. #6
    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
    Plus clair ? Pas vraiment. Mais j'ai fait livrer une tonne de paracétamol en cachet de 2000mg. Et quelque tranxènes aussi !

    Donc tu veux un formulaire où un candidat peut poser une candidature, un rechercheur peut rechercher (de manière permanante ?) des candidatures qui répondent à certains critères, les deux (candidat et rechercheur peuvent faire des recherches).

    Clairement, symfony ne sais pas faire. Le formFilter n'est pas adapté. Et plus, ta requête couvre de nombreuses tables, ce qui les rend encore moins (si si, c'est possible) utilisable.

    Je pense que le moins mauvais que tu puisse faire est de créer un form totalement indépendant de tous liens avec des tables et de te servir de celui-ci en fonction du bouton utilisé (?).

    Mais je reste très septique sur la faisabilité d'une tel interface et sur la viabilité pour tes différents personas d'une tel interface. Personnellement, j'en aurais fait trois différentes.

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

Discussions similaires

  1. [1.x] Embedded forms & bind()
    Par Nico_F dans le forum Symfony
    Réponses: 7
    Dernier message: 18/05/2011, 15h09
  2. [1.x] Embedded Forms 1 to many : ajout dynamique avec ajax
    Par rastaferraille dans le forum Symfony
    Réponses: 3
    Dernier message: 30/03/2011, 11h53
  3. [1.x] Ajouter un onglet jquery pour les forms filter
    Par symfony30000 dans le forum Symfony
    Réponses: 11
    Dernier message: 09/06/2010, 17h54
  4. [1.x] Création d'objets avec Embeded form
    Par Adesfire dans le forum Symfony
    Réponses: 4
    Dernier message: 08/01/2010, 16h07
  5. Form.filter avec plusieurs paramètres !
    Par Jahprend dans le forum VBA Access
    Réponses: 6
    Dernier message: 11/07/2008, 10h18

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