creativestyle / admin-list-bundle
快速且简单的制作管理列表的包
Requires
- php: >=5.5
- creativestyle/utilities: ~2.1
- doctrine/orm: ~2.3
- symfony/options-resolver: ^4
- symfony/templating: ^4
- symfony/twig-bridge: ^4
Requires (Dev)
- phpunit/phpunit: ~6.2
This package is auto-updated.
Last update: 2024-08-29 04:20:15 UTC
README
设置
您可能需要添加到您的 config/packages/framework.yaml
templating:
engines: twig
模板
这些模板与 CSS 框架无关,您应该通过 symfony 机制或更改其配置来覆盖它们,扩展标记并美化它们。
快速入门
在您的控制器中
获取 FilterManager
实例。 这是一个非共享服务,所以每次都获取新的实例。
/** @var FilterManager $filters */ $filters = $this->get('creativestyle_admin_list.filter_manager');
与表单构建器类似,它提供了一个流畅的接口,因此您可以注册新的过滤器
$filters ->registerFilter(new SomeFilter('filterid', ['some_config' => 'value']); ->registerFilter(new SomeFilter('otherfilterid', ['some_config' => 'value']) ;
您还可以注册分页器
$filters ->setPaginator(new SimplePaginator([ 'order_by' => 'location.address.name', ])) ;
配置完成后,创建一个 QueryBuilder
并应用过滤器,然后获取结果
$qb = $repository->createQueryBuilder('product'); $filters->applyFilters($qb); $results = $this->getFilterManager()->getPaginatedResults($queryBuilder);
您需要在模板中使用结果和 FilterManager
return $this->render('template.html.twig', [ 'results' => $results, 'filters' => $filters, ]);
在您的模板中
您可以通过 ID 渲染每个过滤器
{{ filters.renderFilter('filterid')|raw }}
您还可以这样渲染分页控件
{{ results.renderPaginationControls()|raw }}
要渲染结果本身,请使用类似以下的内容
<table> <thead> <tr> <th>Id</th> <th>{{ filters.renderSortControls('entityalias.fieldname', 'Column Title')|raw }}</th> <th>{{ filters.renderSortControls('entityalias.createdAt', 'Created At')|raw }}</th> </tr> </thead> {# The result object is iterable #} <tbody> {% for product in products %} <tr> <td>{{ product.id }}</td> <td>{{ product.fieldname }}</td> <td>{{ product.createdAt|date }}</td> </tr> {% endfor %} </tbody> </table>
就这样!您已经拥有了一个功能齐全的列表 UI,具有分页、排序和搜索。
过滤器参考
除了内置的过滤器,您还可以通过扩展基本过滤器或像 AbstractFilter
这样的基本过滤器来添加自己的过滤器。请查看代码 - 它非常简单。
AbstractFilter
其他过滤器的基类,不直接使用。
选项
callback
可调用。如果提供,则用于在 QueryBuilder
上应用过滤器。如果没有提供,则使用内部过滤机制。
default_value
过滤器的默认值。
label
标签,默认通过使过滤器 ID 人性化来创建。
parameters
将直接传递到模板的参数。
joins
如果应用此过滤器,则要添加到查询中的连接。
接受一个连接数组,其中每个连接都是以下形式的数组
['rootEntityAlias.fieldname', 'alias']
template
用于渲染的模板。
DateFilter
扩展 AbstractFilter
呈现日期选择器字段。
选项
empty_label
未选择时使用的标签。
empty_value
未选择时的值。
strategy
默认使用相等策略。
以下之一
- DateFilter::STRATEGY_EQUAL
- DateFilter::STRATEGY_GREATHER_THAN
- DateFilter::STRATEGY_LESS_THAN
- DateFilter::STRATEGY_GREATHER_THAN_OR_EQUAL
- DateFilter::STRATEGY_LESS_THAN_OR_EQUAL
field
过滤器将应用到的实体字段。
StringFilter
扩展 AbstractFilter
呈现文本输入。允许搜索多个字段,使用 LIKE 等。
选项
concat
如果为 true,则将字段连接后再进行搜索。
wildcard
如果为 true,则允许通配符 *
(在查询中将用 %
替换)。
fields
一个字符串或要搜索的字段列表。
exact
如果为 true,则需要精确匹配(不使用 LIKE
)。如果启用了 concat
或 wildcard
,则默认设置为 false
。否则默认为 true
。
选择过滤器
扩展 AbstractFilter
呈现下拉列表或选项卡。
选项
empty_label
未选择时使用的标签。
empty_value
未选择时的值。
choices
以 [value => label]
形式呈现的选择数组。
callback
对于此过滤器,回调是必需的。
使用如下
new ChoiceFilter('id', [ 'choices' => [ 'black' => 'Dark', 'white' => 'Light', ], 'callback' => function (QueryBuilder $qb, $value) { if ($value) { $qb->andWhere('product.color = :choice') ->setParameter('choice', $value); } } ]);
disabled
禁用过滤器?
tabbed
如果为 true,则使用选项卡而不是下拉列表。
分页器参考
AbstractPaginator
基础分页器,不建议直接使用。
待定
SimplePaginator
向用户展示滑动分页器,当项目较多时可能会较慢,因为它需要执行 COUNT
查询。
选项待定
OffsetPaginator
适用于非常大的列表的分页器。它只允许进行 下一页 和 上一页 导航,而不向用户提供列表中元素/页面的数量信息。
选项待定