Я работаю с Symfony 3.4
и задаюсь вопросом, как и когда использовать createForm
против createFormBuilder
В моем случае мне нужно создать две разные формы для одного и того же класса данных, например, пользовательский объектUser
.Формы отличаются только в некоторых дополнительных полях.
Например, одна форма регистрации для обычных пользователей с дополнительными полями для принятия юридических условий, подписки на новостную рассылку и т. Д. И одна форма регистрации для администраторов с некоторыми другими дополнительными полями.В обоих случаях используется один и тот же класс User
, а дополнительные поля не отображаются:
public function regUserAction(Request $request) {
// Create and show user reg form
}
public function regAdminAction(Request $request) {
// Create and show admin reg form
}
Поскольку форма User
необходима / используется в двух разных местах, было бы неплохо создатьUserFormType
и создайте форму, используя createForm
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.
}
Pro : настройка формы должна быть выполнена только один раз в UserFormType
Con: Невозможно добавить настраиваемые поля в созданную форму, в regUserAction
и regAdminAction
, не так ли?
Поскольку форму User
необходимо настроитьбыло бы неплохо использовать 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 ...)
}
Pro : можно добавить настраиваемые поля в форму
Con: Для каждой формы необходимо снова выполнить общую настройку формы.
Есть ли способ смешать эти два подхода?Чтобы реализовать настройку общей формы только один раз И добавить пользовательские поля для формы?