zer*_*kms 8 php doctrine symfony doctrine-orm
假设我有普通*Type班级:
class LocationType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add(...)
...
}
}
Run Code Online (Sandbox Code Playgroud)
其中一个字段是一个choice类型.应该从数据库(从某个特定的实体存储库)检索需要用作选择项的值.
所以问题是:如何在LocationType类中获取存储库?是通过构造函数传递它的唯一方法吗?
UPD:
我知道entity类型,但不幸的是我不能使用它,因为我的属性不是也不能被定义为one-to-one关系,因为Doctrine不支持的非常复杂的关系条件(但是?).有关其他详细信息,请参阅如何在Doctrine 2中为1:1关系指定多个连接条件
Dar*_*ght 12
您可以将实体字段类型指定为选项,如下所示:
$builder
->add('foo', 'entity', array(
'class' => 'FooBarBundle:Foo',
'query_builder' => function(\Doctrine\ORM\EntityRepository $er) {
return $er->createQueryBuilder('q')->orderBy('q.name', 'ASC');
},
));
Run Code Online (Sandbox Code Playgroud)
编辑:实际上'class'选项是唯一必需的字段选项.您可以在此处阅读有关实体字段类型的更多信息:http://symfony.com/doc/2.0/reference/forms/types/entity.html
希望这可以帮助.
编辑:
下面进一步讨论,这是一个例子
在控制器中:
$entity = new Foo();
$type = new FooType();
$er = $this->getDoctrine()
->getEntityManager()
->getRepository('FooBarBundle:Foo');
$form = $this->createForm($type, $entity, array(
'foo_repository' => $er
));
Run Code Online (Sandbox Code Playgroud)
该$options阵列被传递到FooType::buildForm()方法,从而foo_repository然后应在像因此这种方法可用:
$er = $options['foo_repository'];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17196 次 |
| 最近记录: |