首先,我想澄清一下,我不是在使用Entities/Doctrine处理我的表单(或其他内容)。我正在使用Web服务来添加/编辑数据库中的数据字段。
我正在开发一个需要编辑具有多个地址的公司信息的项目。第一个地址始终是物理地址,因此我在与公司数据相同的循环中获取该地址。
但是,第二个(和第三个,如果存在)地址放置在单独的数据库条目中。 我能够使用单个表单编辑公司数据和公司地址(物理地址),因为数据都在一个集合中。因此,我只需要一个表单,并且不必使用循环来处理地址。
现在,我想编辑第二个地址。我在twig中循环遍历地址并打印出该公司的所有其他地址。 正如我所知道的那样,Symfony不允许同一表单的多个实例,因为这会干扰ID等。
问题是我应该如何仅呈现特定地址的表单。我希望通过单击按钮来编辑它(使用Bootstrap Collapse隐藏表单,如果不进行编辑)
我的代码如下:
控制器:
public function editcompany(Request $request, $klantnr)
{
[...]
$result = [
'gegevens' => [],
'addresses' => [],
];
foreach ($company as $row) {
$dataFields = [
[...] // The data fields of the company (including the physical address)
];
foreach ($dataFields as $dataField) {
if (empty($result['gegevens'][$dataField])) {
$result['gegevens'][$dataField] = $row[$dataField];
}
}
if($row['AdrGid'] != $result['gegevens']['AdrGid']) {
$result['addresses'][$row['AdrGid']] = [
[...] // The data fields for the other addresses
];
}
}
// The form creation of the company data form
$form = $this->createForm(EditcompanyForm::class);
// The form of the other addresses
$form_adres = $this->createForm(EditcompanyAdresForm::class, array(
[...]
));
$form->handleRequest($request);
$form_adres->handleRequest($request);
if($form->isSubmitted() && $form->isValid()) {
[...] // Handling the submitted data for the company data
}
// GEKOPPELDE ADRESSEN company
if($form_adres->isSubmitted() && $form_adres->isValid()) {
[...]
$data = array(
[...] // Setting the data for the other addresses
);
[...]
// Passing the data and other options to the webservices
$this->get('http')->companyRequest($data, $admincode, $service, $token);
$request->getSession()
->getFlashBag()
->add('success', 'Linked address successfully edited');
return $this->redirect($request->getUri());
}
return $this->render('pages/company/edit.html.twig', array(
'client' => $result,
'form_company' => $form->createView(),
'form_company_adres' => $form_adres->createView()
));
}
表单构建器(AbstractType):
class EditcompanyAdresForm extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$factuuradres = $options['NawFactuurAdres'];
$lands = $options['lands'];
$data = array();
$builder
[...] // Add the necessary fields
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
[...] // setting defaults here
));
}
/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'appbundle_form_editcompanyadresform';
}
}
Twig模板(显示地址):
{% for address in client.addresses %}
<div class="right-cont-grey">
[...] // showing addresses
</div>
{% endfor %}
Twig 模板(编辑表单):
{% for address in client.addresses %}
{{ form_start(form_company_adres, {' method': 'POST'}) }}
{{ form_row(form_company_adres._token) }}
<section class="collapse" id="adres_plus">
<div id="adres" class="new-adres collapse right-cont-grey">
<div class="col-sm-12">
[...] // Form_widgets with values from database
</div>
</section>
{{ form_end(form_company_adres) }}
{% endfor %}
简而言之:
如何在不干扰的情况下为每个地址使用地址表单?也许可以在twig文件中的循环内创建视图(渲染)? 我的表单预先填充了来自数据库的数据,以便我可以进行编辑。