Petite note, si vous avez besoin de surcharger un getter ou un setter, vous avez probablement tenté d'écrire ça :

// /lib/model/doctrine/MonModel.class.php
class MonModel extends BaseMonModel
{
  // getter
  public function getMaPropriete()
  {
    // faire quelquechose
    return parent::getMaPropriete();
  }

  // Et pour le setter
  public function setMaPropriete( $value )
  {
    // faire quelquechose
    parent::setMaPropriete($value);
  }
}

Et obtenu une magnifique erreur de récursion :  Fatal error: Maximum function nesting level of '100' reached, aborting!Or en fesant ça, vous passerez par la fonction "magique" __call qui va (bêtement) rééxécuter votre getter/setter à l'infini...

Il en va de même si vous tentez un $this->ma_propriete...

Pour éviter ce passage par __call, vous devez réécrire les setter/getter de cette façon, en utilisant les méthodes _get() et _set() :  : 

// /lib/model/doctrine/MonModel.class.php
class MonModel extends BaseMonModel
{
  // getter
  public function getMaPropriete()
  {
    // faire quelquechose
    return $this->_get('ma_propriete');
  }

  // Et pour le setter
  public function setMaPropriete( $value )
  {
    // faire quelquechose
    $this->_set('ma_propriete', $value);
  }
}

Voilà

Infos

Surcharger un getter/setter du modèle dans symfony.

  • Niveau : Inité
  • Catégorie : Symfony 1.4
  • Publié le : 25 mai 2011
  • Dernière Mise à jour : 25 mai 2011
  • Notions abordées :

Commentaires

par Geraud

site : http://astase.com

le 04 décembre 2011 à 14:40:29

Bonjour,

Il ne faut pas oublier de retourner le retour de _set() pour avoir au comportement standard (et ainsi pouvoir faire des enchainements d'appels de méthodes par exemple)

En gros :
public function setMaPropriete( $value )
{
// faire quelquechose
return $this->_set('ma_propriete', $value);
}

Laisser un commentaire


Votre email ne sera pas publié