【发布时间】:2015-11-05 13:19:26
【问题描述】:
我想实现嵌入式表单。所以存在有公司的客户。在注册期间,他必须以单一形式描述您自己和他的公司。因此我有:
namespace AppBundle\Form;
use AppBundle\Entity\Company;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class CompanyType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add(
'type',
'choice',
[
'choices' => Company::choices()
]
)
->add('name', 'text')
->add('licenseNumber', 'text')
->add('country', 'country')
->add('officeAddress', 'text')
->add('registrationAddress', 'text')
->add('phone', 'text')
->add('fax', 'text')
->add('email', 'email')
->add('description', 'textarea')
->add('Documents', 'text', [ 'compound' => true ])
;
$builder->setMethod('POST');
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => 'AppBundle\Entity\Company'
]);
}
public function getName()
{
return 'app_company';
}
}
namespace AppBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class RegisterType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', 'text')
->add('email', 'email')
->add(
'password',
'repeated',
[
'first_options' => [
'label' => 'Password'
],
'second_options' => [
'label' => 'Repeat Password'
],
'type' => 'password',
'property_path' => 'rawPassword',
]
)
->add('Companies', 'collection', ['type' => new CompanyType()] )
->add('submit', 'submit')
->setMethod('POST')
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver
->setDefaults(
[
'data_class' => 'AppBundle\Entity\Customer'
]
)
;
}
public function getName()
{
return 'app_register';
}
}
所以我想在 RegistryType 中嵌入 CompanyType。因此,在我的注册控制器中,我这样做:
public function registerAction(Request $request)
{
if ($customer = $this->getUser()) {
return $this->redirectToRoute('_profile_index');
}
$customerManager = $this->get('app.services.customer_manager');
$customer = new Customer();
$company = new Company();
$customer->getCompanies()->add($company);
$form = $this->createForm(new RegisterType(), $customer);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$customerManager->create($form->getData());
//return $this->redirectToRoute('_security_register_confirmation');
}
return $this->render(
'AppBundle:Security:register.html.twig',
[
'form' => $form->createView()
]
);
}
结果我收到了嵌入式公司表格,但它是自动呈现的,正如你所见,它并不好。请帮帮我。
【问题讨论】:
标签: forms symfony twig embedding