如何在Sonata Admin中将选择选项添加到过滤器的最佳方式?
表格我可以:
$builder->add('gender', 'choice', array(
'choices' => array('m' => 'Male', 'f' => 'Female'),
'required' => false,
));
但这不适用于过滤器。
答案 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']
])
;
}