首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony2嵌入式表单

Symfony2嵌入式表单
EN

Stack Overflow用户
提问于 2013-06-07 15:55:23
回答 1查看 239关注 0票数 0

我正在尝试理解symfony2中嵌入的表单。

我有两个实体iconasset,它们之间有一个多对多的关系,还有一个关于$icon->imageLargeicon->imageThumbOneToOne

注意:(Asset是类名,但在图标中引用为$image... )

我试图结束的是一个与图标相关的图片库和图标上的两列,以反映哪个图像是主要缩略图和主要大图像……

我已经创建了一个IconType:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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',
        ));
}
}

我在控制器中创建了我的表单:

代码语言:javascript
复制
$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);

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-07 18:49:07

您可以通过如下方式访问已上传的资产:

代码语言:javascript
复制
$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

  • 实现资产类类似于示例中的文档

  • 修改图标类以从Icon::setImageThumb()和Icon::setImageLarge()

  • For图标类中调用$this->add $images ($asset)add Icon类add cascade持久化到$images控制器控制器调用仅在$icon上持久化,其他一切都应该自己处理。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16978991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档