Symfony 3 表单:如何为文本区域小部件设置默认值

Symfony 3 forms: how to set default value for a textarea widget

我想在文本区域小部件上设置值。 我如何在 Symfony 3 中设置文本区域的默认值 对于 TextType(input type="text") 我可以使用值参数但是对于 textarea 我不能!!!我如何设置 textarea 的默认值。

这是我的构建表单

    public function buildForm(FormBuilderInterface $builder, array $options)
    { 
        $builder
        ->add('linkdin', TextType::class, array('attr' => array('placeholder' => 
'linkdin','class' => 'form-control width100','value' => 
MainPageType::$content1[0]['linkdin'])))

        ->add('addres', CKEditorType::class, array('attr' => array('required' =>
 'false','name'=>'editor1' ,'id' => 'editor1','class' => 'ckeditor','empty_data'
 => MainPageType::$content1[0]['addres'])))
        .
    .

假设您使用的是 Symfony 3.4,那么 good documentation 就足够了。

长话短说,你应该使用 data:

$builder->add('token', TextareaType::class, array(
    'data' => 'abcdef',
));

正如文档所说:

The data option always overrides the value taken from the domain data (object) when rendering. This means the object value is also overriden when the form edits an already persisted object, causing it to lose its persisted value when the form is submitted.

您可以像这样将带有数据的变量传输到控制器中的 formType

$form = $this->createForm(Form::class,$YourData);

如果您使用表单来保存新记录和编辑现有记录,您可能会发现“数据”选项(Alex 的解决方案)受到限制,因为这些字段已被覆盖编辑现有记录时的默认数据。

其中一个解决方案是在控制器的 new() 操作中手动设置默认数据,但仅限于 GET 调用,而不是 POST。

$form = $this->createForm(MyType::class, $dto);
$form->handleRequest($request);

if($form->isSubmitted()) {
    if($form->isValid()) {
        // Save data
    }
} else {
    // Set default value
    $form->get('date')->setData(
        new\DateTime(’now’)
    );
}