Как и когда использовать createForm против createFormBuilder - PullRequest
0 голосов
/ 29 января 2019

Я работаю с 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: Для каждой формы необходимо снова выполнить общую настройку формы.


Есть ли способ смешать эти два подхода?Чтобы реализовать настройку общей формы только один раз И добавить пользовательские поля для формы?

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Возможно, вы сможете реализовать код в сервисе и вернуть объект $ formBuilder, чтобы настроить его в своих действиях.Или вы можете реализовать своего рода фабричный шаблон и построить свой $ formBuilder на основе параметров, которые вы передадите ему.

0 голосов
/ 29 января 2019

Вы можете изменить форму в FormType, используя FormEvents, как описано здесь в Документах Symfony.Существует пример , изменяющий форму на основе пользовательских данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...