public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('title_first', 'text', array('constraints' => array(new NotBlank())))->add('title_middle', 'text', array('constraints' => array(new NotBlank())))->add('title_last', 'text', array('constraints' => array(new NotBlank())))->add('transfer_from', 'choice', array('choices' => TransferInformation::getTransferFromChoices(), 'expanded' => true, 'multiple' => false, 'required' => false))->add('account_number', 'text', array('required' => true))->add('firm_address', 'text', array('required' => true))->add('phone_number', 'text', array('required' => true))->add('is_include_policy', 'choice', array('choices' => array(true => 'Yes', false => 'No'), 'expanded' => true, 'label' => ' ', 'constraints' => array(new NotBlank())))->add('transfer_shares_cash', 'choice', array('choices' => array(1 => 'Transfer my shares in-kind OR', 0 => 'sell my shares, and then transfer cash'), 'expanded' => true, 'multiple' => false, 'required' => false))->add('insurance_policy_type', 'choice', array('choices' => TransferInformation::getInsurancePolicyTypeChoices(), 'expanded' => true, 'multiple' => false, 'required' => false))->add('penalty_amount', 'number', array('required' => false))->add('redeem_certificates_deposit', 'radio', array('required' => false))->add('statementDocument', new PdfDocumentFormType()); $factory = $builder->getFormFactory(); $adm = $this->adm; $updateFields = function (FormInterface $form, TransferInformation $data) use($factory, $adm) { $account = $data->getClientAccount(); if ($account) { if (!$adm->isUsedDocusign($account->getId())) { $form->add($factory->createNamed('delivering_account_title', 'text', null, array('required' => false)))->add($factory->createNamed('ameritrade_account_title', 'text', null, array('required' => false))); } $form->add($factory->createNamed('financial_institution', 'text', null, array('required' => true, 'read_only' => true, 'data' => $account->getFinancialInstitution()))); if ($account->isJointType()) { $form->add($factory->createNamed('joint_title_first', 'text', null, array('constraints' => array(new NotBlank()))))->add($factory->createNamed('joint_title_middle', 'text', null, array('constraints' => array(new NotBlank()))))->add($factory->createNamed('joint_title_last', 'text', null, array('constraints' => array(new NotBlank())))); } } if ($data->getTransferCustodian()) { $answers = $data->getQuestionnaireAnswers(); if ($answers->isEmpty()) { $questions = array($data->getTransferCustodian()->getTransferCustodianQuestion()); $answers = new ArrayCollection(); foreach ($questions as $question) { if (null !== $question) { $answer = new TransferCustodianQuestionAnswer(); $answer->setQuestion($question); $answer->setTransferInformation($data); $answers->add($answer); } } } if ($answers->count()) { $form->add($factory->createNamed('questionnaireAnswers', 'collection', $answers, array('type' => new TransferInformationQuestionAnswerFormType(), 'label' => ' '))); } } }; $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use($updateFields) { /** @var TransferInformation $data */ $data = $event->getData(); $form = $event->getForm(); if (null === $data) { return; } $updateFields($form, $data); }); if (!$this->isPreSaved) { $builder->addEventListener(FormEvents::BIND, array($this, 'validate')); } }