如何使用基于自定义存储库方法的DoctineModule ObjectSelect?

时间:2014-01-20 15:07:30

标签: doctrine-orm zend-framework2

我有一张表,其中包含属于不同类别A和B的人员列表。我的问题是我有一个带有DoctrineModule ObjectSelect的表单,我想在ObjectSelect中只显示A类人员的名字。

我找到了这个https://github.com/doctrine/DoctrineModule/blob/master/docs/form-element.md#example-3--extended-version,但这个例子对我来说并不清楚,我不知道如何让它适应我的情况。

谢谢。

请原谅我的英语。

1 个答案:

答案 0 :(得分:2)

它实际上与您正在查看的示例非常相似(我猜这就是没有示例的原因),唯一的区别是不是使用find / findBy / ...而是将您的自定义存储库名称作为名称传递密钥,代码类似于:

    $this->add(array(
        'name' => 'my-select-object',
        'type' => 'DoctrineModule\Form\Element\ObjectSelect',
        'attributes' => array(
        ),
        'options' => array(
            'label' => 'My Label',
            'object_manager'  => $entityManager,
            'target_class'    => 'Application\Entity\MyEntity',
            'property'       => 'name',
            'is_method'      => true,
            'find_method'    => array(
                'name'   => 'myCustomRepositoryMethod',
                'params' => array(
                ),
            ),
        ),

    ));

另请注意,您的实体需要了解存储库的存在,因此请确保它使用此行:

@ORM\Entity(repositoryClass="Application\Entity\Repository\MyCustomRepository")

因此,当您使用此ObjectSelect打开表单时,它将调用您的存储库方法,而不是直接加载下拉列表。该方法应该只返回一个实体对象数组,然后由ObjectSelect使用它们来生成select元素的选项。