【问题标题】:Custom Query_builder function in Form Type表单类型中的自定义 Query_builder 函数
【发布时间】:2016-06-01 02:25:18
【问题描述】:

来自文档:

use Doctrine\ORM\EntityRepository;
// ...

$builder->add('users', 'entity', array(
    'class' => 'AcmeHelloBundle:User',
    'query_builder' => function(EntityRepository $er) {
        return $er->createQueryBuilder('u')
            ->orderBy('u.username', 'ASC');
    },
));

如何将 query_builder 函数移动到外部类并从表单类型中的该类访问查询方法。我的想法是使代码更加模块化,更好,因此 FormType 不会自行连接到 db,而是使用例如 EntityRepository 类作为实体

想要的代码(摘要):

use Acme\HelloBundle\UserRepository;
// ...
'query_builder' = UserRepository->getSortedList();

【问题讨论】:

    标签: symfony doctrine-orm


    【解决方案1】:

    我假设你在 2014 年使用过 Symfony 2.3,所以你应该使用 choices。只需将它们或存储库包含在选项数组中即可,因此表单不会连接到数据库

    1. 包括选择
    
    
        // in controller
        $object = ...;
        $form = $this->createForm(new SomeObjectType(), $object, array('user_choices' => $userRepository->getSortedList()));
    
        // in SomeOjectType
        $builder->add('users', 'entity', array(
            'class' => 'AcmeHelloBundle:User',
            'choices' => $options['user_choices'],
        ));
        ...
        // in setDefaultOptions method
        public function setDefaultOptions(OptionsResolverInterface $resolver)
        {
            $resolver->setDefaults(array(
                ...
                'user_choices' => array(),
            ));
        }
    
    
    1. 包括存储库
    
    
        // in contoller
        $object = ...;
        $form = $this->createForm(new SomeObjectType(), $object, array('repository' => $userRepository));
    
    
        // in SomeOjectType
        $builder->add('users', 'entity', array(
            'class' => 'AcmeHelloBundle:User',
            'choices' => $options['repository']->getSortedList(),
        ));
        ...
        // in setDefaultOptions method
        public function setDefaultOptions(OptionsResolverInterface $resolver)
        {
            $resolver->setDefaults(array(
                ...
                'repository' => null,
            ));
        }
    
    

    希望对有类似问题的朋友有所帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多