Symfony 3表单:如何为textarea组件设置默认值
在Symfony 3中为Textarea/CKEditor设置默认值
嘿,我之前也踩过这个坑!在Symfony表单里,TextType能通过attr里的value设置默认值,是因为它对应原生<input type="text">的value属性,但textarea(包括你用的CKEditor这类富文本编辑器)的渲染逻辑不一样,没法用这个方式。而且你代码里用的empty_data也不对——它是用来定义用户没输入内容时表单返回的默认值,不是用来设置编辑器初始显示内容的。
正确的做法是用表单字段的data选项,直接给字段指定初始值:
修改你的buildForm代码
把CKEditorType那一行的empty_data换成data就可以了:
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' ), // 这里用data选项设置默认值 'data' => MainPageType::$content1[0]['addres'] )) ... }
更符合Symfony规范的做法
如果你的表单是绑定到实体类的,其实更推荐在控制器层给实体设置初始值,而不是在表单类型里硬编码:
// 假设你的实体类是MainPage $mainPage = new MainPage(); $mainPage->setAddres(MainPageType::$content1[0]['addres']); $mainPage->setLinkdin(MainPageType::$content1[0]['linkdin']); // 创建表单时传入实体,表单会自动读取属性值作为默认值 $form = $this->createForm(MainPageType::class, $mainPage);
这样做的好处是把数据逻辑和表单定义分开,更符合Symfony的MVC设计理念,也更易于维护。
注意点
data选项的优先级很高,如果同时绑定了实体/数组数据和设置了data,data会覆盖绑定的数据;- 如果你希望默认值只在表单第一次加载时生效,后续提交后保留用户输入的内容,那控制器层绑定实体的方式更合适。
内容的提问来源于stack exchange,提问作者pedram shabani
相关产品推荐
相关产品推荐

