2016-12-15 60 views
0

我目前正在研究FormType,我想使用转换器来获取特殊属性。Symfony 3将注入转换器转换为表格类型

$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

这一切都很好解释[这里:*如何访问服务或从窗体内部配置*](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" 
    ... 

并在 “[谟] \ SRC [应用]包\ Ressources \翻译\” 所有文件“的消息。 “你的情况

文件 ”[郎2字符代码] .yml messages.en.yml“ 应该是这样的:

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

而且becareful的” .yml “文件不接受” 选项卡标志“(仅”空间标志“)。

验证消息还应该在 “[谟] \ SRC [应用]包\ Ressources \翻译\” 中命名为这个文件: “验证[郎2字符代码] .yml”

在你案“validators.en.yml”:

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

的“名字”的有效性规则应该与你的表单中使用的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; 
}