2010-06-04 8 views
4

Je veux écraser une méthode de symfony/lib/plugins/sfDoctrinePlugin/lib/form/sfFormDoctrine.class.php.Symfony: en essayant d'écraser une méthode d'une classe symfony

Je pense qu'un bon moyen pourrait être d'écrire à nouveau la méthode sous la forme de la classe où j'ai besoin de cette méthode.

Dans ce cas, si je besoin de cette méthode dans d'autres classe de formulaire dois-je écrire à nouveau la nouvelle méthode, donc je briser la règle DRY ...

Ainsi est-il une meilleure façon?

Cordialement

Javi

Répondre

1

Vous pouvez créer une nouvelle classe qui hérite de sfFormDoctrine qui redéclare les méthodes dont vous avez besoin, puis utilisez votre nouvelle classe à la place de sfFormDoctrine où vous avez besoin de cette méthode.

2

En m'appuyant sur la réponse du colonel Sponz, je l'ai fait plusieurs fois en étendant la classe que je veux remplacer. En prolongeant la classe, vous n'avez rien à dupliquer. Dans la ou les méthodes que vous souhaitez personnaliser, ajoutez simplement votre code personnalisé, puis appelez le parent::method_name() pour exécuter la même méthode que la super classe. Vous obtenez tous les avantages des deux. Les appels à des méthodes qui n'existent pas dans la sous-classe s'exécuteront contre la super classe.

Il est à noter que cette stratégie est basique et n'est pas limitée à Symfony ou même à PHP.

4

Vous devez utiliser BaseFormDoctrine s'il s'agit d'une méthode spécifique à Doctrine ou BaseForm si vous souhaitez que la méthode s'applique à tous les formulaires. Ces classes de forme sont fournies spécifiquement à cette fin.

+1

juste pour accélérer la recherche des classes, BaseFormDoctrine se trouve dans /lib/form/doctrine/BaseFormDoctrine.class.php et BaseForm dans /lib/form/BaseFormDoctrine.class.php – Populus