我想要填充嵌入式表格。所以有公司的客户存在。在注册期间,他必须以单一形式描述自己和他的公司。因此我有:
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';
}
}
所以在RegistreType中我想嵌入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()
]
);
}
结果我重新获得嵌入式公司表单,但它会自动呈现,因为您认为它不好。 Pleasy帮助我。
答案 0 :(得分:0)
我明白了!那是因为我不会手动处理表单字段,例如:
<root>
<children>
<child1></child1>
<child2></child2>
<child3></child3>
<child4></child4>
<child5></child5>
</children>
<persons>
<child name="child1"></child>
<adult name="adult1"></adult>
<child name="child2"></child>
<child name="child3"></child>
<child name="child4"></child>
<child name="child5"></child>
<adult name="adult2"></adult>
<adult name="adult3"></adult>
</persons>
</root>
答案 1 :(得分:0)
我不知道你是否知道Form themes in Symfony,但我认为这可能就是你要找的。 p>
您必须在src \ YourBundle \ Resources \ views \ Form(或其他任何地方,但这是Symfony文档指示的路径)中创建表单主题。我们称之为registrationForm.html.twig。
在里面,你将为你的个人用途创建一个自定义主题,按照你的意愿设计公司表格:
{% block _app_company_row %} // or {% block _app_company_widget %}
// your custom template here
// see documentation to learn how to do this correctly
// as this can be rather difficult to understand
{% endblock %}
然后,您必须在模板中“调用”此主题:
{% form_theme form 'YourBundle:Form:registrationForm.html.twig' %}
form 是包含formView实例的twig变量。
但我认为你的问题中可能存在一些问题,例如“什么是选择形式组件?”..
关于公司实体的一些信息也可能有所帮助..