2016-12-15 12 views
0

В настоящее время я работаю над FormType, где я хочу использовать переводчик для специальных атрибутов.Symfony 3 Inject translator to Form Type

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

Так как же я получаю работать? Должен ли я вводить его как услугу (как?), Или я должен передать ее в качестве параметра для этого типа формы (еще как?)?

Заранее спасибо.

+0

Это все очень хорошо объяснил [здесь: * Как получить доступ к Услугам или Config из внутри формы *] (https://symfony.com/doc/current/form/form_dependencies.html). – Yoshi

+0

Большое спасибо! – Mason

+1

, что поля (ярлык и заполнитель) должны быть переведены из коробки symfony – Matteo

ответ

1

Я согласен с @Matteo, он должен работать прямо из коробки в вашей форме.

[проект] \ приложение \ Config \ config.yml должны иметь:

framework: 
    .... 
    translator: {fallbacks:["en"]} 
    translator: 
     paths: 
      - "@[App]Bundle/Resources/translations" 
    ... 

И под "[PROJET] \ SRC [App] Bundle \ RESSOURCES \ переносов \" все файлы: «сообщения. вкладка .yml "файлы не принимают": [Ланг код 2 символа] .yml "

в вашем случае файл "messages.en.yml"

person: 
    label: 
     firstname: "firstname" 
     lastname: "lastname" 

Becareful Также должен выглядеть" знак "(только« знак пространства »).

Validation сообщение должна также быть в состоянии "[PROJET] \ SRC [App] Bundle \ RESSOURCES \ переводов \" в файлах с именем, как это: "валидаторы [Ланг код 2 символа] .yml"

В вашем случай «validators.en.yml»:

person: 
    validity: 
     firstname: "firstname doesn't match" 

правило проверки для «FirstName» должен быть аннотаций в data_class используется с формой.

class [YOUR DATA_CLASS] { 
    /** 
    * @Assert\NotBlank() 
    * @Assert\Regex(
    * groups= {[if needed]} 
    * pattern = "^[a-zA-Z \-]+", 
    * match= "false", 
    * message = "person.validity.firstname") 
    * 
    */ 
    public $firstname; 
}