答案 0 :(得分:4)
FormBuilder
通过检查实体中相应属性的映射中的类型来猜测字段类型。
使用text
代替string
作为列映射的type
,FormBuilder
将使用textarea而不是输入。
示例:
/**
* @ORM\Column(type="text")
*/
protected $field;
使用$builder->add('field');
输出:
<textarea id="entity_field" name="entity[field]" required="required"></textarea>
有关详细信息,请查看Symfony\Bridge\Doctrine\Form\DoctrineOrmTypeGuesser。
<强>更新强>
因此,您不使用映射类。
查看FormBuilder
,如您所见,如果找不到相应的Guesser
,表单类型将为TextType
(输入文字)。
否则,有3种不同的Guesser
:
由于您的类未映射,因此Symfony将使用ValidatorTypeGuesser
来猜测您的字段类型。
此Guesser
会查找班级中的约束
例如,如果您的字段的Type
约束类型为integer
,则会使用NumberType
并呈现输入类型number
。
我的第一个想法是使用具有较大最小长度的Length
约束。
但是,经过多次尝试并在课堂上查看后,似乎永远不会猜到TextareaType
,除非您的类已被映射且您的字段已text
为类型(使用DoctrineTypeGuesser
)
因此,如果没有映射类,Symfony就无法从类型猜测中创建textarea
。
有关更多信息,请查看ValidatorTypeGuesser::guessTypeForConstraint
。
另请参阅文档的Form Type Guessing一章,其中展示了如何使用一个好的示例创建自己的TypeGuesser
。