Symfony 从数据库中的条目标记表单
我创建了一个嵌入式表单。如何在ItemType.php中使用数据库中的名称进行标记 1.)例如: 2.)顺便说一句,symfony2为每个ItemType.php呈现一个数字0,1,2。我怎样才能摆脱它 我的行动:Symfony 从数据库中的条目标记表单,symfony,symfony-forms,Symfony,Symfony Forms,我创建了一个嵌入式表单。如何在ItemType.php中使用数据库中的名称进行标记 1.)例如: 2.)顺便说一句,symfony2为每个ItemType.php呈现一个数字0,1,2。我怎样才能摆脱它 我的行动: $task = new UserFriends(); foreach ($fb_friends as $k => $v) { $name = $v->getName(); $friend_id = $v->getFriendId();
$task = new UserFriends();
foreach ($fb_friends as $k => $v) {
$name = $v->getName();
$friend_id = $v->getFriendId();
$id = $v->getId();
$t = new Item();
$t->name = $name;
$t->friendId = $friend_id;
$t->id = $id;
$task->getId()->add($t);
}
$form = $this->createForm(new CreateRequest(), $task, array());
CreateRequest.php-form的一部分:
$builder->add('id', 'collection', array('type' => new ItemType(),
我的ItemType.php的一部分
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('id', 'checkbox', array('label'=> 'Name', 'required' => false, 'mapped' => false));
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Frontend\ChancesBundle\Entity\Item',
));
}
public function getName()
{
return 'item';
}
以及my Item.php-Entity的一部分
class Item
{
public $id;
public $friendId;
public $name;
public function getFriendId()
{
return $this->friendId;
}
您可以将实体管理器传递给表单,并从数据库中选择所需的任何内容 在您的控制器中(或您调用表单的任何位置):
$em = $this->getDoctrine()->getManager();
$form = $this->createForm(new MyFormType($blabla), $blabla, array('em' => $em));
public function buildForm(FormBuilderInterface $builder, array $options)
{
$somethingFromDb = $options['em']->findByName('someName');
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setRequired(array(
'em',
));
$resolver->setAllowedTypes(array(
'em' => 'Doctrine\Common\Persistence\ObjectManager',
));
}
在表单中键入:
$em = $this->getDoctrine()->getManager();
$form = $this->createForm(new MyFormType($blabla), $blabla, array('em' => $em));
public function buildForm(FormBuilderInterface $builder, array $options)
{
$somethingFromDb = $options['em']->findByName('someName');
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setRequired(array(
'em',
));
$resolver->setAllowedTypes(array(
'em' => 'Doctrine\Common\Persistence\ObjectManager',
));
}
好的,但是在我的例子中,如何获得$em to ItemType()?ItemType将被多次调用,就像数据库中的条目一样。如何从数据库中获取id与名称匹配的特定条目?您可以通过$options数组传递任何需要的内容。因此,您可以执行一个select查询,然后每次都将结果传递给ItemType。我想我不明白。使用您的解决方案,我可以将其传递到表单CreateRequest()。这管用!但是在CreateRequest表单中,我调用表单ItemType()。如何将查询传递给ItemType(),以创建我想要的标签?@Gunnar请尝试以下操作:
array('type'=>newitemtype(),'options'=>array('myVar'=>myValue')
然后在ItemType::buildForm()
检查$options['myVar']
中,它可能会在那里。