Symfony2实体表单类型从另一个实体获取数据 [英] Symfony2 Entity Form Type gets data from another Entity
本文介绍了Symfony2实体表单类型从另一个实体获取数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有2个实体:音频和目的地
在音频中:
* @ ORM \OneToOne(targetEntity =HearWeGo \HearWeGoBundle \Entity \Destination,inversedBy =audio)
* @ Assert \NotBlank(message =此栏位必须填写)
*
* /
私人$ destination;
我创建了一个表单类型名称EditAudioType,用于编辑上传链接存储在数据库中的音频
<?php
命名空间HearWeGo\HearWeBundle\Form;
使用Symfony \Component\Form\AbstractType;
使用Symfony \Component\Form\FormBuilderInterface;
使用Symfony \ Component\OptionsResolver\OptionsResolver;
使用HearWeGo \HearWeBundle \Entity \Audio;
$ b $ class AudioAudioType extends AbstractType
{
public function buildForm(FormBuilderInterface $ builder,array $ options)
{
$ destination_repo = $ options ['dr ];
uilder
- > add('name','text')
- > add('audio','file')
- > ; add('destination','entity',array(
'class'=>'HearWeGoHearWeGoBundle:Destination',
'choices'=> $ destination_repo-> findToReplaceAudio('id') ,
'property'=>'name'
));
public function configureOptions(OptionsResolver $ resolver)
{
$ resolver-> setDefaults(array('data_class'=>HearWeGo \\\ \\HearWeGoBundle\\Entity\\Audio));
$ resolver-> setRequired(array('dr'));
}
public function getName()
{
return'edit_audio';
}
}
我的旧帖子:
Symfony2实体表单类型获取数据
但是现在我不知道要在表单的选择
属性中放置什么,因为此自定义回购函数具有参数,不像旧的答案。在 DestinationRepository中
:
public function findByAudioId($ id)
{
return $ this-> getEntityManager() - > createQuery('SELECT d FROM HearWeGoHearWeGoBundle:Destination d,HearWeGoHearWeGoBundle:Audio a WHERE d.id = IDENTITY(a.destination)') - > getResult ();
public function findToReplaceAudio($ id)
{
$ result = $ this-> findDestinationWithoutAudio();
$ result [] = $ this-> findByAudioId($ id);
返回$ result;
}
解决方案
:
<?php
命名空间HearWeGo\HearWeBundle\Form;
使用Symfony \Component\Form\AbstractType;
使用Symfony \Component\Form\FormBuilderInterface;
使用Symfony \ Component\OptionsResolver\OptionsResolver;
使用HearWeGo \HearWeBundle \Entity \Audio;
使用HearWeGo\HearWeGoBundle\\Entity\Repository\AudioRepository;
$ b $ class AudioAudioType extends AbstractType
{
public function buildForm(FormBuilderInterface $ builder,array $ options)
{
$ builder
- > ;'add'('name','text')
- > add('audio','file')
- > add('destination','entity',array(
'class'=>'HearWeGoHearWeGoBundle:Destination',
'query_builder'=> function(AudioRepository $ repository){
return $ repository-> findToReplaceAudioQueryBuilder('id');
},
'property'=>'name'
));
public function configureOptions(OptionsResolver $ resolver)
{
$ resolver-> setDefaults(array('data_class'=>HearWeGo \\\ \\HearWeGoBundle\\Entity\\Audio));
}
public function getName()
{
return'edit_audio';
}
}
请看官方文档。
I have 2 entities: Audio and Destination
In Audio:
/**
* @ORM\OneToOne(targetEntity="HearWeGo\HearWeGoBundle\Entity\Destination", inversedBy="audio")
* @Assert\NotBlank(message="This field must be filled")
*
*/
private $destination;
I created a Form Type name EditAudioType used to edit an audio whose uploaded link is stored in database
<?php
namespace HearWeGo\HearWeGoBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use HearWeGo\HearWeGoBundle\Entity\Audio;
class AudioAudioType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$destination_repo=$options['dr'];
$builder
->add('name','text')
->add('audio','file')
->add('destination','entity',array(
'class'=>'HearWeGoHearWeGoBundle:Destination',
'choices'=>$destination_repo->findToReplaceAudio('id'),
'property'=>'name'
));
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array('data_class'=>"HearWeGo\\HearWeGoBundle\\Entity\\Audio"));
$resolver->setRequired(array('dr'));
}
public function getName()
{
return 'edit_audio';
}
}
I did as the similar answer in my old post: Symfony2 Entity Form Type gets data
But now I don't know what I will put in choices
attribute of form, because this custom repo function has parameter, not like the old answer. In DestinationRepository
:
public function findByAudioId($id)
{
return $this->getEntityManager()->createQuery('SELECT d FROM HearWeGoHearWeGoBundle:Destination d,HearWeGoHearWeGoBundle:Audio a WHERE d.id=IDENTITY (a.destination)')->getResult();
}
public function findToReplaceAudio($id)
{
$result=$this->findDestinationWithoutAudio();
$result[]=$this->findByAudioId($id);
return $result;
}
解决方案
I'll do something like :
<?php
namespace HearWeGo\HearWeGoBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use HearWeGo\HearWeGoBundle\Entity\Audio;
use HearWeGo\HearWeGoBundle\Entity\Repository\AudioRepository;
class AudioAudioType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name','text')
->add('audio','file')
->add('destination','entity',array(
'class'=>'HearWeGoHearWeGoBundle:Destination',
'query_builder'=>function (AudioRepository $repository) {
return $repository->findToReplaceAudioQueryBuilder('id');
},
'property' => 'name'
));
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array('data_class'=>"HearWeGo\\HearWeGoBundle\\Entity\\Audio"));
}
public function getName()
{
return 'edit_audio';
}
}
Please have a look to the official documentation.
这篇关于Symfony2实体表单类型从另一个实体获取数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文