如何在Sonata Admin中将选择选项添加到过滤器中的最佳方法是什么?

时间:2014-09-03 19:21:47

标签: php symfony sonata-admin

如何在Sonata Admin中将选择选项添加到过滤器的最佳方式?

表格我可以:

$builder->add('gender', 'choice', array(
    'choices'   => array('m' => 'Male', 'f' => 'Female'),
    'required'  => false,
));

但这不适用于过滤器。

4 个答案:

答案 0 :(得分:6)

对于您的管理类,如果您想为gender字段添加自定义选项,则可以使用configureDatagridFilters功能添加过滤器,并使用doctrine_orm_string提供您的选择列表数组形式

$datagridMapper
       ->add('gender',
        'doctrine_orm_string',
        array(), 
       'choice',
        array('choices' => array('m' => 'Male', 'f' => 'Female')
        )
    );

答案 1 :(得分:0)

尝试一下:

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{

    $datagridMapper

       ->add('gender',null,  array(), ChoiceType::class, array(
           'choices' => array('m' => 'Male', 'f' => 'Female')
       ))
    ;
}

答案 2 :(得分:0)

在我的版本上-symfony 3.4和“ sonata-project / doctrine-orm-admin-bundle”:“ ^ 3.0”

以这种方式工作:

INSERT INTO #temp_costs_count
            (version_id,
             total_costs,
             cost_included)
            SELECT tc.version_id,
                   count(*),
                   sum(CASE
                         WHEN tc.is_included = 1 THEN
                           1
                         ELSE
                           0
                       END)
                   FROM #temp_costs tc
                   GROUP BY tc.version_id
                   HAVING NOT EXISTS (SELECT *
                                             FROM #temp_costs_count tcc
                                             WHERE tcc.version_id = version_id
                                                   AND tcc.total_costs = count(*)
                                                   AND tcc.cost_included = sum(CASE
                                                                                 WHEN tc.is_included = 1 THEN
                                                                                   1
                                                                                 ELSE
                                                                                   0
                                                                               END));

选择是数据库中的字符串值。

如果您希望从数据库中进行一些逻辑过滤选择:

->add('preferredLanguage', 'doctrine_orm_choice', [
                    'global_search' => true,
                    'field_type' => ChoiceType::class,
                    'field_options' => [
                        'choices' => [
                            'English' => PotentialCustomerInterface::PREFERRED_LANGUAGE_ENGLISH,
                            'Spanish' => PotentialCustomerInterface::PREFERRED_LANGUAGE_SPANISH
                        ]
                    ]
                ]
            )

在UserRepository中,只需创建返回查询生成器的方法即可。

答案 3 :(得分:0)

我正在使用 symfony 4.3 sonata-admin-bundle 3.0 ,这是我最终要这样做的方式:

use Sonata\DoctrineORMAdminBundle\Filter\StringFilter;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;

/**
 * @param DatagridMapper $datagridMapper
 */
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
    $datagridMapper
        ->add('gender', StringFilter::class, ['label' => 'Gender'], ChoiceType::class, [
            'choices' => ['m' => 'Male', 'f' => 'Female']
        ])
    ;
}