Symfony 3.4
createForm
createFormBuilder
在我的例子中,我需要为同一个数据类创建两种不同的形式,例如用户对象
User
. 表格仅在一些附加字段中有所不同。
例如,一份普通用户的注册表,包含接受法律条款、订阅时事通讯等的附加字段;一份管理员用户的注册表,包含其他一些附加字段。在这两种情况下相同
类,但未映射其他字段:
public function regUserAction(Request $request) {
// Create and show user reg form
}
public function regAdminAction(Request $request) {
// Create and show admin reg form
}
使用者
在两个不同的地方需要/使用表单。最好创建一个
UserFormType
并使用
创建表单
public function regUserAction(Request $request) {
$form = $this->createForm(UserFormType::class, $user, array());
}
public function regAdminAction(Request $request) {
$form = $this->createForm(UserFormType::class, $user, array());
}
class UserFormType extends AbstractType {
// setup of form fields, FormEvents handlers, etc.
}
赞成
:表单的设置只需在中执行一次
反对的论点:
regUserAction
和
regAdminAction
使用者
表单需要定制,最好使用
createFormBuilder
相反:
public function regUserAction(Request $request) {
$formBuilder = $this->createFormBuilder($user, array())
->add(... common form setup ...)
->add(... custom user fields ...)
}
public function regAdminAction(Request $request) {
$formBuilder = $this->createFormBuilder($user, array())
->add(... common form setup ...)
->add(... custom admin fields ...)
}
:可以向表单中添加自定义字段
有没有办法将这两种方法结合起来?要只实现一次公共表单设置并为每个表单添加自定义字段?