Mon arrière-plan est en propulseur, alors j'espérais que ce serait une chose simple de remplacer un getter magique dans une doctrine_record (Sfdoctrinerecord), mais je reçois un segfault ou la méthode de remplacement est simplement ignorée en faveur de la Un dans la superclasse.
https://gist.github.com/697008AF4D7B606286A P>
class FaqCategory extends BaseFaqCategory { public function __toString() { return $this->getCategory(); } // doesn't work // override getDisplayName to fall back to category name if getDisplayName doesn't exist public function getDisplayName() { // also tried parent::getDisplayName() but got segfault(!) if(isset($this->display_name)) { $display_name = $this->display_name; } else { $display_name = $this->category; } return $display_name; } }
4 Réponses :
Essayez des méthodes _GET et _SET. P>
Pas sûr de ce que vous vouliez faire doctrine (avec Pour accéder / modifier la valeur de la colonne directement (contournement personnalisée (GET | SET) TERS) Vous devez utiliser tout le
attr_auto_accessor_override code> attribut activé, que est activé fort> activé par Symfony) vous permet de remplacer certaines colonnes de composants 'getters simplement en définissant
getcolumnname < / Code> Méthodes dans la classe modèle. C'est pourquoi votre méthode code> getdisplayName code> peut tomber en boucle infinie qui provoque généralement SEGFAULT. P> LI>
_GET ('Column_Name') code> et
_set ('Nom de colonne ") code> Méthodes définis par
doctrine_record code> classe. p> li>
$ obj-> grossistes () code>,
$ obj-> quelque chose code> et
obj ["quelque chose"] Les appels sont en réalité magiques. Ils sont "redirigèrent" à
$ obj-> obtenir ("quelque chose") code> qui n'est que réel fort> moyen d'accéder aux données de modèle. P> li>
ol>
Merci pour l'info sur attr_auto_accessor_override; Je vois maintenant où dans la doctrine_record vérifié avant d'envoyer la valeur du champ. -Br
Configurer la doctrine:
public function getAnything() { return $this->_get('anything'); } public function setAnything() { return $this->_set('anything', $value); }
Est-ce que cela fonctionnera si vous dites quelque chose = 'Test_var'? J'essaie d'obtenir des méthodes de getter pour travailler avec des noms de champ qui ont des traits de soulignement, mais cela ne fonctionne pas. Aucune suggestion?
@Shivaas Essayez avec gettestvar code> pour
test_var code>
Ceci fonctionne:
class FaqCategory extends BaseFaqCategory { public function __toString() { return $this->getCategory(); } public function getDisplayName() { if($this->_get("display_name") != "") { $display_name = $this->_get("display_name"); } else { $display_name = $this->getCategory(); } return $display_name; } }