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 20/01/2011, 09h27   #1
Membre à l'essai
 
Inscription : mars 2008
Messages : 159
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 159
Points : 24
Points : 24
Par défaut setFilters dans l'admin générator

Bonjour,

J'ai généré un module "admin" grâce à l'admin générator. Tout fonctionne normalement.

Sur certaines pages je dois avoir un lien qui recharge la page est applique un filtre un champ.

Le problème est le suivant :

Sur le module (je surcharge la fonction générée dans le cache) la fonction "setFilterts(monFiltre)" fonctionne mais que sur l'id de l'enregistrement qui est ma clé primaire. Si j'applique un filtre sur un autre champ cela ne fonctionne pas.

Y a t-il des restrictions sur la fonctions setFilters() ?

De plus est il possible de faire un filtre avec une négation : j'affiche les champs qui ne sont pas égale à "maValue" ?

ps : Si j'utilise le formulaire de filters auto généré cela fonctionne normalement.

Code :
1
2
3
4
5
6
7
8
 
  public function executeIndex(sfWebRequest $request)
  {
    if($request->getParameter('filter')){
      $this->setFilters($request->getParameter('filter'));
    }
    parent::executeIndex($request);
  }
Merci pour votre aide
coupolites est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 09h43   #2
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
Ce que tu demandes n'est pas très clair, difficile de t'aider.

C'est bien de mettre le code normalement généré, mais tous ceux qui peuvent t'aider le connaissent, mettre le code que tu essaies de valider pourrait permettre de mieux comprendre le problème.

Il n'est pas possible avec le système de filtre standard de faire des filtres par négation.
__________________
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 20/01/2011, 09h53   #3
Membre à l'essai
 
Inscription : mars 2008
Messages : 159
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 159
Points : 24
Points : 24
Citation:
Envoyé par Michel Rotta Voir le message
Ce que tu demandes n'est pas très clair, difficile de t'aider.

C'est bien de mettre le code normalement généré, mais tous ceux qui peuvent t'aider le connaissent, mettre le code que tu essaies de valider pourrait permettre de mieux comprendre le problème.

Il n'est pas possible avec le système de filtre standard de faire des filtres par négation.
Merci pour ta réponse mimi.

Le code que j'ai posté n'est pas celui généré. Je rajoute le setFilters et ensuite j'appelle la fonction "parent".
coupolites est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 09h57   #4
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
Je reste certain que si tu mettais le code modifié, on aurait une meilleur approche de ce que désire.
__________________
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 20/01/2011, 10h00   #5
Membre à l'essai
 
Inscription : mars 2008
Messages : 159
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 159
Points : 24
Points : 24
Citation:
Envoyé par Michel Rotta Voir le message
Je reste certain que si tu mettais le code modifié, on aurait une meilleur approche de ce que désire.
Le code posté est le code modifié

Code :
1
2
3
4
5
6
7
  public function executeIndex(sfWebRequest $request)
  {
    if($request->getParameter('filter')){
      $this->setFilters($request->getParameter('filter'));
    }
    parent::executeIndex($request);
  }
le lien :

Code :
http://toto.fr/admin_dev.php/gestion?filter[cp]=59
Si ce code ne correspond pas à ce que tu souhaites alors je ne comprends pas
coupolites est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 11h17   #6
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
Je vais nettoyer mes lunettes

...

Bon, je regarde le code et ... je ne vois toujours pas ce que tu souhaites réellement faire Tu ne rajoute rien au filtre dans ce code. Je prend un petit kilo de paracétamol et ... non, toujours pas compris.

Tu dis que tu veux rajouter des filtres au filtre, mais où les ajoutes-tu ?
__________________
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 20/01/2011, 11h23   #7
Membre à l'essai
 
Inscription : mars 2008
Messages : 159
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 159
Points : 24
Points : 24
Citation:
Envoyé par Michel Rotta Voir le message
Je vais nettoyer mes lunettes

...

Bon, je regarde le code et ... je ne vois toujours pas ce que tu souhaites réellement faire Tu ne rajoute rien au filtre dans ce code. Je prend un petit kilo de paracétamol et ... non, toujours pas compris.

Tu dis que tu veux rajouter des filtres au filtre, mais où les ajoutes-tu ?
Non en fait je surcharge pas les filtres j'en "ajoute" un par défaut sur l'index.

En gros j'affiche ma page index donc dans le cache il y a un "executeAction" généré....
Ce que je veux c'est sur cette page index ajouter un filtre si un paramètre est présent. (code ci dessous).
Je surcharge donc la fonction Index (code ci dessous) et je rajoute dans cette fonction le setFilters(...).

Merci
coupolites est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 11h29   #8
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
Je te propose une autre approche, que j'ai déjà utilisée.

Modifie la génération de la requête. Tu envoies au filtre (objet) un query a compléter. Dans ce query initial, tu y définis le filtre que tu souhaites. Le filtre généré prend donc tous en compte.

Je me suis servi de cela pour afficher des listes filtrables en fonction de l'utilisateur (exemple, la liste des contacts d'un utilisateurs, tous les contacts de tous les utilisateurs sont dans une table unique, mais un utilisateur ne peux voir, trier, filtrer que ces contacts).
__________________
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 20/01/2011, 14h07   #9
Membre à l'essai
 
Inscription : mars 2008
Messages : 159
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 159
Points : 24
Points : 24
Citation:
Envoyé par Michel Rotta Voir le message
Je te propose une autre approche, que j'ai déjà utilisée.

Modifie la génération de la requête. Tu envoies au filtre (objet) un query a compléter. Dans ce query initial, tu y définis le filtre que tu souhaites. Le filtre généré prend donc tous en compte.

Je me suis servi de cela pour afficher des listes filtrables en fonction de l'utilisateur (exemple, la liste des contacts d'un utilisateurs, tous les contacts de tous les utilisateurs sont dans une table unique, mais un utilisateur ne peux voir, trier, filtrer que ces contacts).
Je vois le principe ( ce qui pourrait m'aider pour mon filtre "négatif") par contre je ne vois pas vraiment comment l'appliquer (d'un point de vue technique)

Merci
coupolites est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 15h42   #10
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
Je ne sais pas trop comment tu as bâtis ton contrôleur.

Dans celui-ci, il doit y avoir un moment où tu vas lier le filtre avec les données stockées dans le container de l'utilisateur. Ensuite, tu dois utiliser ce filtre pour générer la partie query de la requête utilisée pour la liste. C'est là qu'il faut intervenir.

C'est plus pour des modifications permanentes genre, uniquement les enregistrements liés à l’utilisateur que pour des modifications temporaires du style une sélection par exclusion. Pour celle là, je me demande si tu n'aurais pas intérêt à construire tes propres objets à inclure dans le filtre.

Il faudra faire une rétro analyse sur sfFiltre, j'avais creusé la chose, mais c'est un peu loin et je n'ai jamais eu l'occasion de revoir depuis. Mais il me semble que c'est réalisable.
__________________
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 20/01/2011, 15h45   #11
Membre à l'essai
 
Inscription : mars 2008
Messages : 159
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 159
Points : 24
Points : 24
Citation:
Envoyé par coupolites Voir le message
Je vois le principe ( ce qui pourrait m'aider pour mon filtre "négatif") par contre je ne vois pas vraiment comment l'appliquer (d'un point de vue technique)

Merci
J'ai trouvé quelque chose qui fonctionne et qui je pense est "assez propre".

Dans mon action je surcharge la fonction buildQuery() qui est auto-généré est visible dans le cache. Ainsi je récupère l'objet query et j'ajoute ce que je veux à ma requête.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
  protected function buildQuery(){
    $query = parent::buildQuery();
    $filter = $this->request->getParameter('filter') ;
    if(!empty($filter)){
      switch ($filter){
        .....
          $query->andWhere('MON FILTRE');
        .....     
      }
    }
    return $query ;
  }
coupolites est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 16h16   #12
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
C'est un peu l'idée...

Sauf que je l'aurais fait un appel de fonction plus haut, pour bénéficier de la mise à jour automatique de la fonction si tu rajoutes des champs.

Je n'avais pas saisi que tu travaillais sur des formulaires d'admin dont le fonctionnement est un peu particulier.
__________________
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 20/01/2011, 16h24   #13
Membre à l'essai
 
Inscription : mars 2008
Messages : 159
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 159
Points : 24
Points : 24
Citation:
Envoyé par Michel Rotta Voir le message
C'est un peu l'idée...

Sauf que je l'aurais fait un appel de fonction plus haut, pour bénéficier de la mise à jour automatique de la fonction si tu rajoutes des champs.

Je n'avais pas saisi que tu travaillais sur des formulaires d'admin dont le fonctionnement est un peu particulier.
C'est à dire ? Qu'entends tu part "plus haut" (enfin quelle fonction) ?

Merci
coupolites est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 17h24   #14
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
Celle qui appel le build query.

J'ai tout reconfiguré sur mon poste pour travailler avec symfony 2 et je n'ai pas de cache de symfony 1 avec un module admin généré sous la main

Je pense (a vérifier) qu'il serait mieux de modifier cette méthode (celle qui appel le build query) histoire que si tu rajoutes un champ dans ton fichier de configuration de la génération de l'administration, le build query soit modifié en regard.
__________________
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 20/01/2011, 18h21   #15
Membre à l'essai
 
Inscription : mars 2008
Messages : 159
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 159
Points : 24
Points : 24
Citation:
Envoyé par Michel Rotta Voir le message
Celle qui appel le build query.

J'ai tout reconfiguré sur mon poste pour travailler avec symfony 2 et je n'ai pas de cache de symfony 1 avec un module admin généré sous la main

Je pense (a vérifier) qu'il serait mieux de modifier cette méthode (celle qui appel le build query) histoire que si tu rajoutes un champ dans ton fichier de configuration de la génération de l'administration, le build query soit modifié en regard.
Ok merci
coupolites est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h41.


 
 
 
 
Partenaires

Hébergement Web