2016-11-30 3 views
0

У меня есть поле формы, используемое в нескольких формах в моем приложении. Мне нужно заставить его быть ucfirst() 'd, всюду. Каков наилучший способ сделать это?, применяя ucfirst() в поле текстовой формы глобально, но до события доктрины

Я не могу использовать событие prePersist/preUpdate доктрины, потому что это значение поля также переносится в другой объект, через событие, отправленное перед упорством, и я хочу, чтобы это нажатое значение уже было преобразовано в это время.

Я думал, что могу использовать DataTransformer вместо этого, но, на мой взгляд, DataTransformers предназначены для двунаправленных операций (преобразование/обратное преобразование). В этом случае нет обратного преобразования. Таким образом, это может плохо использовать DataTransformer.

Есть ли другие решения для глобальной нормализации?

+0

Вы можете поместить 'ucfirst' в свой объект setter. – qooplmao

+0

это, вероятно, лучшее использование принципа KISS (https://en.wikipedia.org/wiki/KISS_principle). Мне стыдно, что я даже не подумал об этом. Вы можете преобразовать свой комментарий в качестве ответа, и я буду рад поддержать его и принять его. – VaN

ответ

1

Используйте ucfirst() в своих установщиках объектов. Например:

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

    return $this; 
} 

Это должно сработать. Но тогда вы должны изменить ВСЕ свои сущности.

Но мне интересно, если это легче сделать это:

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

Может быть, это второй вариант?

 Смежные вопросы

  • Нет связанных вопросов^_^