【发布时间】:2014-05-14 08:54:29
【问题描述】:
假设我有一个一对多的关系:
- 一个公司可以拥有多张图片
- 我有公司实体和形象实体
现在,我想在模板中显示公司的所有图片。而且我还想让这些图片直接可编辑。我想为 DoctrineArrayCollection 的每个实体添加一个表单并将它们传递给模板。在模板中,如果有人点击相应的图片,则应该淡入,应该能够编辑图片描述并通过 ajax 将其传递给控制器。
在我的实体中,我添加了一个没有注释的字段:
private $form;
public function setForm(MyPictureForm $form)
{
$this->form = $form;
}
public function getForm()
{
return $this->form;
}
现在在我的控制器中,我为公司的每张图片添加一个表单实例:
//office images with forms
$officeImages = array();
foreach($company->getOfficeImages() as $image)
{
$form = $this->get('companybundle.imagedescription.form.factory')->createForm();
$form->setData($image);
$image->setForm($form->createView());
array_push($officeImages, $image);
}
return $this->render('CompanyBundle:Company:Show/show.html.twig', array(
'company' => $company,
'officeImages' => $officeImages
));
}
在我的模板中我是这样渲染的:
{% for image in officeImages %}
<a href="#" title="{% if image.description %}{{ company.description }}{% else %}CLICK HERE FOR EDIT{% endif %}">
{% if image.image %}
<img src="{{ vich_uploader_asset(image, 'image') | imagine_filter('company_office_image_thumb') }}"
alt="{% if image.description %}{{ company.description }}{% endif %}"/>
{% else %}
{% image '@UserBundle/Resources/public/img/nopic_logo.jpg' output='/images/nopic_logo.jpg' %}
<img src="{{ asset_url }}" alt="Joblogo"/>
{% endimage %}
{% endif %}
</a>
{{ form(image.form) }}
{% else %}
<p>Es sind noch keine Images vorhanden</p>
{% endfor %}
最后有很多 javascript 东西可以处理淡入/淡出表单及其提交。
这是处理我的案件的正确方法吗?我认为不会导致为每张图片传递表单似乎是开销?
我使用表单而不是简单地从手动添加的输入字段中传递数据的原因是 csrf 保护和表单组件的智能使用。
【问题讨论】:
标签: symfony symfony-forms symfony-2.3