以下是用于创建表单的代码:
$form = $this->createFormBuilder($city)
->add('name', 'text')
->add('images', 'collection', array('type' => new ImageType())
->getForm();
城市images
属性,是Image
实体的集合。
这里是ImageType
的定义
class ImageType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('path', new ImageFieldType());
}
public function setDefaultOptions(OptionsResolverInterface $resolver) {
$resolver->setDefaults(array('data_class' => 'MyBundleEntityImage',));
}
public function getName() {
return 'image';
}
}
这里是我的自定义字段类型ImageFieldType
:的代码
class ImageFieldType extends AbstractType {
public function getDefaultOptions(array $options) {
return array('path' => null);
}
public function getParent() {
return 'field';
}
public function getName() {
return 'imageField';
}
}
为了渲染ImageFieldType
,我使用以下块:
{% block imageField_widget %}
{% if form.vars.value is not null %}
<a href="{{ path('_cityManage') }}/CityID/ImageID">
<img class="image_type" src="{{ asset('uploads/documents/' ~ form.vars.value) }}" />
</a>
{% endif %}
{% endblock %}
如何获取此分支块中的city.id
和当前image.id
?我试过使用{{ id }}
,但这次打印的有点像form_image_0_path
。
我的目标是有一个链接到页面path('_cityManage')/city.id/image.id
在这种情况下我该怎么做(我不确定这是否是最好的方法,但它有效):
在您的情况下,在控制器中,我会在调用呈现函数时传递您需要的变量:
return $this->render('view', array(
'form' => $form->createView(),
'city' => $currentCity,
'image' => $currentImage
);
您现在可以在模板中使用这些变量:
{{ city.id }}
{{ image.id }}
同样,我不确定这是否真的是最好的方法,但目前它对我有效,我不知道还有其他方法。。。