我正在尝试理解symfony2中嵌入的表单。
我有两个实体icon和asset,它们之间有一个多对多的关系,还有一个关于$icon->imageLarge和icon->imageThumb的OneToOne。
注意:(Asset是类名,但在图标中引用为$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->setImageThumb($asset1); $icon->setImageLarge($asset2);设置$icon->addImage($asset1); $icon->addImage($asset2);。
我不确定这一切是否有意义,但任何帮助弄清楚逻辑或简单地如何访问这些资产都将不胜感激!
发布于 2013-06-07 18:49:07
您可以通过如下方式访问已上传的资产:
$imageThumbFile = $form->get('imageThumb')->get('file')->getData();
$imageLargeFile = $form->get('imageLarge')->get('file')->getData();如果您计划将这些内容作为blobs存储在数据库中,那么您可能会发现这个问题很有帮助:How do I persist Images with Doctrine
或者,您可以将上传的文件存储在文件系统中,并通过遵循食谱条目How to handle File Uploads with Doctrine将文件上传集成到您的实体生命周期中
编辑:
如果使用来自食谱条目的生命周期回调方法:
add
https://stackoverflow.com/questions/16978991
复制相似问题