2016-12-15 9 views
1

В настоящее время я работаю над FormType для человека. Я хочу специальное сообщение о достоверности, поэтому я использую атрибуты oninvalid и onchange. Однако переводы, используемые в этих атрибутах, не будут работать. Я получаю только сообщение о действительности, в котором говорится «person.label.firstname».Symfony 3 FormType использовать перевод для attr

Переводы для этикетки и заполнителя выполняются. Так почему же он не работает с onchange и oninvalid? (Да, переводы действительно существуют)

$builder->add("firstname", TextType::class, array(
       "label" => "person.label.firstname", 
       "attr" => array("placeholder" => "person.label.firstname", 
        "pattern" => "^[a-zA-Z \-]+", 
        "oninvalid" => 'setCustomValidity("person.validity.firstname")') 
      )) 

Спасибо заранее.

ответ

0

Перевод для placeholder работ, поскольку trans фильтр применяется в шаблоне по умолчанию для рендеринга формы виджетов, как вы можете увидеть здесь: https://github.com/symfony/symfony/blob/master/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig#L333

Но даже если trans фильтр был применен ко всем атрибутам, он, вероятно, до сих пор Wouldn 't ведут себя так, как ожидалось, потому что значение oninvalid равно setCustomValidity("person.validity.firstname"), и я предполагаю, что вы хотите иметь только person.validity.firstname.

Чтобы решить проблему, внедрить translator услуги в ваш тип формы и установить атрибуты в явном виде переведенных значений:

$builder->add("firstname", TextType::class, array(
      "label" => "person.label.firstname", 
      "attr" => array("placeholder" => "person.label.firstname", 
       "pattern" => "^[a-zA-Z \-]+", 
       "oninvalid" => 'setCustomValidity("' . $this->translator->trans('person.validity.firstname') . '")' 
     )) 
+0

Прежде всего спасибо за ваш ответ. Но переводчик - это неопределенный метод внутри этого FormType. Так, например, как я могу вставить файл валидаторов yaml translation? – Mason

+0

Чтобы ввести услугу в свою форму, вы должны зарегистрировать ее как услугу. Вот статья документации о том, как это сделать: https://symfony.com/doc/current/form/create_custom_field_type.html#form-field-service –

+0

Хорошо, я постараюсь и заработаю. Благодаря! – Mason