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 :

Appliquer un pattern sur les données [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Appliquer un pattern sur les données
    Bonjour,

    Dans ma base de données j'utilise beaucoup d'identifiant sous forme 1.2.3.4
    hors en javascript les "." ne fonctionnent pas des masses pour identifier les objets et de plus les paramètres passés en get ne sont pas bien géré au niveau du routing symfony.

    J'ai commencé a utiliser des str_replace pour remplacer les . par des _ mais je suis obligé de le faire également dans l'autre sens et a force je suis obligé de tester si il y a des . ou des _ car je ne sais meme plus.

    Je cherche donc un moyen de filtrer ces données au niveau de l'ORM. En effet, si je pouvais dire a doctrine qu'en base de données les champs sont sous forme "1.2.3.4" mais que dès lors que j'y accède en php ils doivent m'être retournés comme "1_2_3_4" ca serait super.

    D'après mes recherches google je dois m'intéresser aux filtres du coté de symfony mais je n'ai pas trouvé d'explications.

    Merci de votre aide.

  2. #2
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Pour bien situer le problème, qu'est-ce qui t'empêche d'ajouter un getter à la classe concernée dans le modèle, du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    lib/model/doctrine/MaClasse.class.php
     
    MaClasse extends BaseMaClasse {
     /* @ method public function getMaColonne() 
      générée par Symfony pour récupérer les données, on n'y touche pas
      @return "1.2.3.4"
    */
     
    public function getMaColonneFormatted() {
    return str_replace(".", "_", $this->getMaColonne());
    }
    (et un setter faisant le travail inverse, bien entendu)

  3. #3
    Invité
    Invité(e)
    Par défaut
    Salut,

    Oui j'y ai pensé mais je ne sais pas si Doctrine utilise ce getter lorsque je fais des findByMaColonne() ou meme lorsque je modifie un objet et que je l'enregistre en base de données quelle format va-t-il utiliser pour cette colonne?

  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
    Symfony passe par les getter et setter a chaque accès aux données. Que tu y accède pas un : getDonnee() ou un $record['donnee'] elle va transiter par le setter.

    Elle est également utilisée pour l'hydratation.

    Le seul cas particulier où tu passeras à côté c'est si, dans une requête, tu renommes volontairement ton champ dans la méthode select() du DQL.

    Par contre, je simplifierais la solution de Herode en ne changeant pas le nom de la variable.
    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
     
    // lib/model/doctrine/MaClasse.class.php
     
    MaClasse extends BaseMaClasse {
     /* @ method public function getMaColonne() 
      générée par Symfony pour récupérer les données, on n'y touche pas
      @return "1.2.3.4"
    */
     
    public function getMaColonne() {
      return str_replace( ".",  "_", parent::_get('maColonne') );
    }
     
    public function setMaColonne( $valeur) 
    {
      // Éventuelle test de conformité avec un événement si non conforme
      parent::_set( 'maColonne', str_replace( '_', '.', $valeur ) );
      return $this;
    }
     
    }
    Ce qui permet de rester transparent au niveau des form généré notamment.

    edit 9:20
    A noter que les méthodes :
    parent::setMaColonne()
    ne fonctionnent pas, cette méthode étant construite à la volée. Il convient donc d'appeler le setter de base : _set(). Idem pour le getter.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Super

    Du coup il y a d'autres données que je pourrais aussi pré-formater.
    Je suis sur autre chose actuellement je pense tester cette méthode d'ici lundi, je passerai en résolu à ce moment là ou au pire je reviendrai vers vous.

    Merci beaucoup.

  6. #6
    Invité
    Invité(e)
    Par défaut
    J'ai fait un petit test mais malheureusement j'ai un petit souci.
    En effet, comme je le pensais au départ, les méthodes utilisées dans doctrine ne doivent pas se baser sur les getter et setter personnalisés.

    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
     
    //Modèle
    class MaTable extends BaseMaTable
    {
       public function getId(){
           return str_replace(".","_", parent::_get("Id"));
       }
     
       public function setId($id){
           parent::_set("id",str_replace('_','.',$id));
       }
    }
     
    //Action
    class monActions extends sfActions {
     
        public function executeIndex(sfWebRequest $request) {
            $id = $request->getParameter('id');
     
            $this->monObjet = Doctrine_Core::getTable('maTable')->findOneById($id);
            //ne renvoie aucun résultats car $id = "1_2_3_4"
            //alors que dans la base de données id = 1.2.3.4
        }
    }
    Y a t-il un moyen de faire cette manipulation dans une couche encore plus basse que le modèle pour que Doctrine y passe aussi?
    Peut-on forcer Doctrine à utiliser ces getter et setter?

    Où alors je me suis planté quelque part?

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

Discussions similaires

  1. Filtrer sur les données vides dans un formulaire
    Par jevany dans le forum Access
    Réponses: 7
    Dernier message: 29/05/2006, 08h50
  2. MAX et Jointure sur les données correspondantes
    Par lepeule dans le forum Langage SQL
    Réponses: 1
    Dernier message: 12/04/2006, 16h18
  3. [debutant] Question sur les données.
    Par Norabfr dans le forum Débuter
    Réponses: 4
    Dernier message: 03/01/2006, 13h47
  4. Filtre sur les données des 3 derniers mois?
    Par Arkalys dans le forum Access
    Réponses: 2
    Dernier message: 21/10/2005, 09h02

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