【发布时间】:2019-04-03 14:10:29
【问题描述】:
我在我的一个 Sylius 网格配置中添加了一个大型实体过滤器。除了class 名称之外,我还没有找到任何配置选项,从外观上看,选项值只是按 ID 排序的。有没有办法使用存储库方法或至少提供排序字段?我需要为此使用自定义过滤器吗?
【问题讨论】:
我在我的一个 Sylius 网格配置中添加了一个大型实体过滤器。除了class 名称之外,我还没有找到任何配置选项,从外观上看,选项值只是按 ID 排序的。有没有办法使用存储库方法或至少提供排序字段?我需要为此使用自定义过滤器吗?
【问题讨论】:
您可以定义要在 YAML 文件上使用的存储库方法以及要发送到该方法的参数:
sylius_grid:
grids:
app_user: # Your grid name
driver:
name: doctrine/orm
options:
class: "%app.model.user%"
repository:
method: myCustomMethod
arguments:
id: resource.id
sorting:
name: asc
limits: [10, 25, 50, 100]
查看 Sylius Grid Bundle 文档了解更多信息:Configuration Reference
【讨论】:
name: sylius.grid_filter, type: my_entity_type, form_type: AppBundle\Grid\Filter\MyEntityFilterType,然后您可以使用过滤器:my_entity_type,如果这是您需要的,我将使用我的工作代码编辑我的答案有
这是定义新类型的方法:
final class CustomFilterType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add(
'shop',
EntityType::class,
[
'class' => Shop::class,
'label' => false,
'multiple' => true, //if you need multiple selection
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('s');
// define your query builder here
},
'choice_label' => function ($shop) { /** @var $shop Shop */
return $shop->getName();
},
]
);
}
/**
* {@inheritdoc}
*/
public function getBlockPrefix(): string
{
return 'sylius_grid_filter_entity_multiple';
}
}
然后在你的 services.yaml 中:
app.grid_filter.custom_filter:
class: Sylius\Component\Grid\Filter\SelectFilter
tags: [{
name: 'sylius.grid_filter',
type: 'custom_type',
form_type: App\Form\Grid\Filter\CustomFilterType
}]
最后,在您的网格定义中:
filters:
shops:
type: custom_type
label: app.ui.shops
【讨论】: