我试图理解symfony2中的嵌入表单。
我有两个实体icon
和asset
它们之间存在多对多关系,OneToOne
和$icon->imageLarge
上有icon->imageThumb
。
注意:(资产是类名,但在图标内引用为$image...
我最终想要的是一个与图标相关的图像库和图标上的两列,以反映哪个图像是主缩略图和主要大图像......
我创建了一个IconType:
class IconType extends AbstractType{
public function buildForm(FormBuilderInterface $builder, array $options){
$builder->add('name');
$builder->add('imageThumb', new AssetType());
$builder->add('imageLarge', new AssetType());
}
public function getName(){
return 'icon';
}
public function setDefaultOptions(OptionsResolverInterface $resolver){
$resolver->setDefaults(array(
'data_class' => 'SixString\PearBundle\Entity\Icon',
));
}
}
和AssetType:
class AssetType extends AbstractType{
public function buildForm(FormBuilderInterface $builder, array $options){
$builder->add('file');
}
public function getName(){
return 'asset';
}
public function setDefaultOptions(OptionsResolverInterface $resolver){
$resolver->setDefaults(array(
'data_class' => 'SixString\PearBundle\Entity\Asset',
));
}
}
我在控制器中创建了我的表单:
$icon = new Icon;
$form = $this->createForm(new IconType(), $icon);
if($request->isMethod('POST')) {
$form->bind($request);
if ($form->isValid()) {
....
}
}
return $this->render('SixStringPearBundle:Icon:form.html.twig', array("form" => $form->createView()));
到目前为止,所有内容似乎都在互动,我在模板中创建了我的表单,它显示了图标名称字段以及两个资产文件上传者。
我迷路的地方是如何访问上传的assets
。我需要将这两个assets
持久保存到db,然后将$icon->addImage($asset1); $icon->addImage($asset2);
设置为多对多,并$icon->setImageThumb($asset1); $icon->setImageLarge($asset2);
我不确定这一切是否有意义,但任何帮助搞清楚逻辑或只是如何访问这些资产都将不胜感激!
答案 0 :(得分:0)
您可以按如下方式访问上传的资源:
$imageThumbFile = $form->get('imageThumb')->get('file')->getData();
$imageLargeFile = $form->get('imageLarge')->get('file')->getData();
如果您计划将这些存储在数据库中作为blob,那么您可能会发现此SO问题有用:How do I persist Images with Doctrine
或者,您可以将上传的文件存储在文件系统中,并按照菜谱条目How to handle File Uploads with Doctrine
将文件上传集成到您的实体生命周期中编辑:
如果使用cookbook条目中的生命周期回调方法: