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 07/09/2011, 11h09   #1
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 77
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 77
Points : 12
Points : 12
Par défaut filtre admin generator

Bonjour à tous,
j'ai un serieux probleme:
- j'utilise deux bases de données sur un projet.
- j'ai crée un module admin generator (pour une table de ma première base) pour avoir le filtre par defaut.
- dans l'un des champs de cette table je stocke des id venant d'une table de la deuxieme base.
- pour avoir les bons label dans mon filtre, j'ai fait ça dans le fichier lib/filter/xxxxfilter.class.php
Code :
$this->widgetSchema['format'] = new sfWidgetFormDoctrineChoice(array('model'=>'Format','add_empty' => true));
jusqu’à présent tout est correct ; dans mon filtre j'ai la bonne liste déroulante qui me ramène les infos venant de la table de la deuxième base.

Le problème est que lorsque j'essaye de filtrer sur ce champ (contenant les infos de la table de la 2eme base), il n'effectue aucun tri dans la table concerne par le module (qui fait référence a une table de la 1ere base)

Merci pour votre aide.
lepopol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 22h02   #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
Toi au moins tu fais des trucs tordu et pas simple...

Tu peux mettre ton shema ou un bout avec les deux bases et les tables concernées ?

Ensuite le fichier de configuration du form pourrait servir.

Je n'ai jamais tenté un truc pareille, aucune idée des possibilités de réalisation de la chose
__________________
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 15/09/2011, 10h27   #3
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 77
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 77
Points : 12
Points : 12
je commençais à me sentir très seul sur ce forum!

Voici les infos:

schema de la table concerne par le module genere.Le champ qui contiendra les données venant de l'autre base est le champ "format"
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
 
Document:
  connection: baseclient
  tableName: document
  columns:
    id:
      type: integer(11)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    nom:
      type: string(45)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    image:
      type: string(255)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    format:
      type: string(45)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    unite:
      type: string(255)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    modele_id:
      type: integer(11)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    langue_id:
      type: integer(11)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    visuel_id:
      type: integer(11)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    theme_campagne_id:
      type: integer(11)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
  relations:
    Modele:
      local: modele_id
      foreign: id
      type: one
    Langue:
      local: langue_id
      foreign: id
      type: one
    Visuel:
      local: visuel_id
      foreign: id
      type: one
    ThemeCampagne:
      local: theme_campagne_id
      foreign: id
      type: one
    Creation:
      local: id
      foreign: document_id
      type: many
le schema de la table format dans la deuxieme base (c'est l'id de cette table qui sera stocke dans la champ format cité ci-dessus)
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
 
PresseFormat:
  connection: basemedia
  tableName: presse_format
  columns:
    id:
      type: integer(11)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    nom:
      type: string(255)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    colonne:
      type: string(45)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    hauteur:
      type: string(45)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    largeur:
      type: string(45)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    surface:
      type: string(45)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
  relations:
    PresseTarif:
      local: id
      foreign: presse_format_id
      type: many
Maintenant le fichier de configuration du filtre du module generé a partir de la premiere table (document)

Code :
1
2
3
4
5
6
7
8
 
 public function configure()
  {
      $this->widgetSchema['nom'] = new sfWidgetFormFilterInput(array
          ('with_empty' => false));
 
      $this->widgetSchema['format'] = new sfWidgetFormDoctrineChoice(array('model'=>'PresseFormat','add_empty' => true));
  }
Après avoir fait tout ceci , mon filtre me donne bel et bien un champ format avec les données de la table "PresseFormat" et ayant pour "value" les id des champs concernés.
Mais quand je filtre dessus rien ne se passe!!snif snif
lepopol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2011, 12h35   #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
Point 1, le modèle.

Je pars du présupposé qu'il n'y a pas d'autre possibilité que d'utiliser deux bases.

Par contre, la constitution des shema.yml n'est pas viable à terme. En effet, il semble (est certain ?) que tu aies créés les bases de données avant d'importer le schéma dans symfony. C'est la moins bonne méthode pour faire un shema.yml fonctionnel. Soit tes deux bases sont nouvelles et tu as out intérêt à écrire un shema.yml propre et viable et à les générer depuis, soit tes bases existent et il n'est pas envisageable de les régénérer et il faut alors retravailler le shema.yml pour qu'il colle aux bases et soit utilisable, ce qui est beaucoup plus lourd.

Ton shema.yml tel que je l'aurais écris (du moins le partiel que tu as envoyé...

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
 
Document:
  connection: baseclient
  tableName: document
  columns:
    #l'id est auto généré s'il n'y a pas de clef primaire
    nom:  string(45)
    image:  string(255)
    format: string(45)
    unite: string(255)
    modele_id: 
      type : integer
      notnull: true
    langue_id:
      type: integer
      notnull: true
    visuel_id:
      type: integer)
      notnull: true
    theme_campagne_id:
      type: integer
      notnull: true
  relations:
    Modele:
      # les autres paramètres sont ceux par défaut (dans la mesure ou l'autre table s'appelle ici modele)
      foreignAlias: documents
      # a noter que l'alias de la relation sur la table modele est au pluriel, en effet, un modele
      # a ici plusieurs documents liés donc un Doctrine_Collection en retour, donc pas un Doctrine_Record
      # donc un "s" à documents pour l'indiquer.
    Langue:
      foreignAlias: documents
    Visuel:
      foreignAlias: documents
    ThemeCampagne:
      foreignAlias: documents
    # pour Creation: la relation sera décrite sur la table création.
    # Les relations sont décrites sur une seul des deux tables de la relation, normalement,
    # le côté n de la relation.
 
 
PresseFormat:
  connection: basemedia
  tableName: presse_format
  columns:
    nom: string(255)
    colonne: string(45)
    hauteur: string(45)
    largeur: string(45)
    surface: string(45)
  relations:
    # A décrire sur l'autre côté : PresseTarif:
Question, pourquoi le format est-il un string(45) dans la table document alors que le nom est un string(255) et n'est pas pour autant garanti unique dans le modèle ?

Question, tu laisses entendre que tu veux stocker les id des PresseFormat, pourquoi dans une string ?

Ton shema pourrait alors ressembler plutôt à ceci :
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
 
Document:
  connection: baseclient
  tableName: document
  columns:
    nom:  string(45)
    image:  string(255)
    format_id: integer
    unite: string(255)
    modele_id: 
      type : integer
      notnull: true
    langue_id:
      type: integer
      notnull: true
    visuel_id:
      type: integer)
      notnull: true
    theme_campagne_id:
      type: integer
      notnull: true
  relations:
    Modele:
      foreignAlias: documents
    Langue:
      foreignAlias: documents
    Visuel:
      foreignAlias: documents
    Format:
      class: PresseFormat
      local: format_id # Ici on n'est pas sur les paramètres par défaut, il faut donc les préciser
      foreignAlias: documents
    ThemeCampagne:
      foreignAlias: documents
 
PresseFormat:
  connection: basemedia
  tableName: presse_format
  columns:
    nom: string(255)
    colonne: string(45)
    hauteur: string(45)
    largeur: string(45)
    surface: string(45)
En principe (non testé) ce type de shema "over" deux bases est supporté par doctrine.


Point 2, le widget

Bon, si on part sur de l'integer stocké dans de l'integer, cela pourrait aller mieux, quoique, PHP devrait avoir pu gérer.

Question, quel est le SQL généré par ton filtre ?

Question, que est le contenu des données de ton objet user issu du filtre ?

Tu trouveras les deux réponses en mode debug dans la barre de débug.
__________________
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/09/2011, 14h44   #5
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 77
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 77
Points : 12
Points : 12
Bonjour
Je viens de mettre en place toute les instructions que tu m'as donné, mais rien , j'ai arrange mon schema.yml !!Mais la mise en place de ceci
Code :
1
2
3
4
Format:
      class: PresseFormat
      local: format_id # Ici on n'est pas sur les paramètres par défaut, il faut donc les préciser
      foreignAlias: documents
a généré une erreur lors de l'insertion du sql dans la base de données.

Voici c que la requette retourne dans les log
Code :
1
2
 
SELECT d.id AS d__id, d.nom AS d__nom, d.image AS d__image, d.format AS d__format, d.unite AS d__unite, d.modele_id AS d__modele_id, d.langue_id AS d__langue_id, d.visuel_id AS d__visuel_id, d.theme_campagne_id AS d__theme_campagne_id FROM document d LIMIT 10 - ()
il n'y a pas de clause where pourtant j'ai bien choisi un format d'un certain id.

J'ai aussi essaye de le mettre dans l'action index de mon module
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
 
public function executeIndex(sfWebRequest $request)
  {
    // sorting
    if ($request->getParameter('sort') && $this->isValidSortColumn($request->getParameter('sort')))
    {
      $this->setSort(array($request->getParameter('sort'), $request->getParameter('sort_type')));
    }
 
    // pager
    if ($request->getParameter('page'))
    {
      $this->setPage($request->getParameter('page'));
    }
 
    $this->pager = $this->getPager();
    $this->sort = $this->getSort();
 
    $this->filters = new DocumentFormFilter($this->getFilters());
        $q = Doctrine_Query::create()
          ->from('PresseFormat f');
    $this->filters->setWidget('format',new sfWidgetFormDoctrineChoice(array('model' => 'PresseFormat','add_empty' => true, 'query'=>$q)));
 
    //$this->filters->setValidator('format', new sfValidatorDoctrineChoice(array('required' => false, 'model' => 'Modele')));
 
  }
Toujours rien il me retourne une erreur même quand je decommente le validateur de ce widget, il exige que je mette le validateur au niveau du document.form.php
J'en peux plus ca me torture ce truc!! Une idée
lepopol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2011, 15h55   #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
Il faut commencer par avoir un shema.yml viable, qui répond aux demandes de l'application.

Le reste du code ne peut être fait qu'une fois le shema viable et terminé.

Concentre toi sur la mise en place d'un shema viable, le reste ira plus simplement.
__________________
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 26/09/2011, 16h58   #7
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 77
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 77
Points : 12
Points : 12
Je pense avoir un schéma viable, que j'ai mis en place en suivant vos instructions et ceux de joobet!!
Et toujours rien!! j'aimerais éviter cette option mais je pense que je vais faire un filtre à la mano!!en interrogeant ma base avec de simples requettes doctrine!
lepopol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 17h32   #8
Candidat au titre de Membre du Club
 
Homme
Étudiant
Inscription : mai 2008
Messages : 16
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 19
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2008
Messages : 16
Points : 14
Points : 14
Salut,

J'ai déjà rencontré ce problème. Le soucis vient du formatage des données qui vont d'un formulaire vers ton filter qui est spécifique au filter. Quand tu ne tripatouille pas dedans, ça fonctionne nickel, par dès que tu veux faire ça a ta manière, c'est autre chose.

L'astuce est en fait très simple. Il faut juste surcharger la méthode getFields sur de ton baseFilter dans ton filter comme ceci :

Code :
1
2
3
4
5
6
public function getFields()
{
    $fields = parent::getFields();
    $fields['format'] = 'Enum';
    return $fields;
}
Normalement c'est censé résoudre ton problème
Leward est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/10/2011, 11h42   #9
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 77
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 77
Points : 12
Points : 12
Merci Lewad tu me sauves la vie , tu n'imagines pas a quel point (j’étais entrain de partir sur de ces trafics de code à la con)

Voilà comment j'ai surchager mon getFields; et hop

Code :
1
2
3
4
5
6
7
8
9
10
 
public function getFields()
  {
    return array(
      'id'                => 'Number',
      'nom'               => 'Text',
      'image'             => 'Text',
      'format'            => 'Enum'
    );
  }
Merci à tous pour votre aide, par la même occasion j'ai appris à faire un bon schema.yml
lepopol 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 22h15.


 
 
 
 
Partenaires

Hébergement Web