2016-11-30 1 views
0

J'ai un champ de formulaire utilisé sur plusieurs formulaires dans mon application. Je dois le forcer à être ucfirst() d, partout. Quelle est la meilleure façon d'y parvenir?Application de ucfirst() dans un champ de formulaire texte globalement mais avant l'événement doctrine

Je ne peux pas utiliser l'événement doctrine prePersist/preUpdate, car cette valeur de champ est également transmise à une autre entité, via un événement distribué avant la persistance, et je souhaite que cette valeur transmise soit déjà transformée à ce moment. Je pensais que je pourrais utiliser un DataTransformer à la place, mais dans mon esprit, DataTransformers est pour les opérations bidirectionnelles (transformation/reverse-transform). Dans ce cas, il n'y a pas de reverse-transform nécessaire. Cela peut donc être une mauvaise utilisation de DataTransformer.

Existe-t-il une autre solution pour effectuer globalement cette normalisation?

+0

Vous pouvez placer 'ucfirst' dans votre setter d'entité. – qooplmao

+0

c'est probablement la meilleure utilisation du principe KISS (https://en.wikipedia.org/wiki/KISS_principle). J'ai honte, je n'y ai même pas pensé. Vous pouvez transformer votre commentaire en réponse et je serai ravi de le remettre en question et de l'accepter. – VaN

Répondre

1

Utilisez ucfirst() dans votre setter Entity. Par exemple:

... 
public function setFirstname($fname){ 
    $first = ucfirst($fname); 
    $this->first_name = $first; 

    return $this; 
} 

Cela devrait fonctionner. Mais alors vous devez modifier toutes vos entités.

Mais je me demande s'il est plus facile de le faire:

$user->setFirstName(ucfirst($form->get('first_name')->getData())); 

Peut-être que d'une autre option?