繁体   English   中英

Symfony2嵌入式表格

[英]Symfony2 Embedded Forms

我试图理解symfony2中的嵌入形式。

我有两个实体iconasset有一个多向他们以及之间一对多的关系OneToOne$icon->imageLargeicon->imageThumb

注意:(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->addImage($asset1); $icon->addImage($asset2); $icon->addImage($asset1); $icon->addImage($asset2); 对于许多对许多人,还有$icon->setImageThumb($asset1); $icon->setImageLarge($asset2); $icon->setImageThumb($asset1); $icon->setImageLarge($asset2);

我不确定这一切是否有意义,但是对弄清楚逻辑或简单地访问这些资产的任何帮助将不胜感激!

您可以按以下方式访问上载的资产:

$imageThumbFile = $form->get('imageThumb')->get('file')->getData();
$imageLargeFile = $form->get('imageLarge')->get('file')->getData();

如果您打算将这些作为blob存储在数据库中,则可能会发现以下SO问题很有帮助: 如何使用Doctrine保留图像

或者,您可以按照食谱手册如何使用Doctrine处理文件上传,将上传的文件存储在文件系统中,并将文件上传集成到实体生命周期中

编辑:

如果使用食谱条目中的生命周期回调方法:

  1. 与示例中的Document相似地实现Asset类
  2. 修改Icon类以从Icon :: setImageThumb()和Icon :: setImageLarge()调用$ this-> addImage($ asset)
  3. 对于Icon类,将层叠添加到$ images关系
  4. 从控制器调用仅在$ icon上持续存在,其他所有事情都应该照顾好自己。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM