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;
}
}