В Symfony 2, с французской локалью по умолчанию, в некоторых случаях разделитель десятичных значений отображается в виде запятых в формах.
Запятые в формах не всегда преобразуются в точки, которые используются в моей базе данных в качестве разделителя.
Как я могу убедиться, что каждая запятая числового поля данных заменяется точкой после отправки формы?
Я нашел NumberToLocalizedStringTransformer
:
Эта ссылка но нужно ли добавлять преобразователь данных в каждую форму, чтобы она работала так, как я хочу?
Использование DataTransformer является одним из подходов к решению вашей проблемы локализации. Вам не нужно добавлять его в каждую форму. Вы можете создать свой собственный FormType, расширяющий или наследующий (я думаю) number
тип. В вашем собственном типе формы добавьте преобразователь с вызовом FormBuilderInterface::addViewTranformer()
,
Вы можете найти больше информация здесь. Вот пример из одного из моих собственных типов. Используя этот метод, вы также можете настроить виджет, используемый для рендеринга.
class CustomType extends NumberType
{
public function buildForm ( FormBuilderInterface $builder, array $options )
{
parent::buildForm( $builder, $options );
$builder->addViewTransformer( new CustomTransformer() );
}
public function getName()
{
return 'my_custom_type';
}
}
Затем, когда вы хотите использовать свои локализованные номера, создайте свою форму с my_custom_type
вместо number
,
Другим решением было бы заставить ваших пользователей использовать баллы, показывая ошибку, если они используют что-то еще. Смотри сюда для проверки формы Symfony. Regex
валидатор с чем-то вроде /^(\d|\.)+$/
должно сработать.
Других решений пока нет …