pawellen / listing
提供在 symfony 项目中轻松使用 datatables (http://www.datatables.net/) 的列表组件的打包包
Requires
- php: >=8.0
- ext-json: *
- symfony/framework-bundle: >=4.4
- dev-master
- v0.7.3
- v0.7.2
- v0.7.1
- v0.7.0
- v0.6.2
- v0.6.1
- v0.6.0
- v0.5.6
- v0.5.5
- v0.5.4
- v0.5.3
- v0.5.2
- v0.5.1
- v0.5.0
- v0.4.9
- v0.4.8
- v0.4.7
- v0.4.6
- v0.4.5
- v0.4.4
- v0.4.3
- v0.4.2
- v0.4.1
- v0.4.0
- v0.3.14
- v0.3.13
- v0.3.12
- v0.3.11
- v0.3.10
- v0.3.9
- v0.3.7
- v0.3.5
- v0.3.4
- v0.3.3
- v0.3.2
- v0.3.1
- v0.3.0
- v0.2.8
- v0.2.6
- v0.2.3
- v0.2.1
- v0.2.0
This package is auto-updated.
Last update: 2024-09-22 14:56:00 UTC
README
datatables.net js 插件的构建风格数据表后端插件
版本 2,支持 Symfony 4.4
基于: https://github.com/pawellen/DataTablesListing
DataTables 列表插件
Data tables 列表插件允许您使用 symfony 表单样式轻松创建记录列表。此插件使用流行的 JQuery DataTables 插件 (http://www.datatables.net/)
安装
- 使用 composer 安装插件
{ "pawellen/data-tables-listing": "dev-master" }
- 更新您的 AppKernel.php
$bundles = array ( (...) new PawelLen\DataTablesListing\DataTablesListingBundle() ); 2,5. Configuration: data_tables_listing: default_template: LenPanelBundle::listing_div_layout.html.twig include_assets: datatables_js: false datatables_css: false include_jquery: false jquery_js: "//code.jqueryjs.cn/jquery-2.1.3.min.js" 3. Add DataTables javascript script to your template using listing_scripts twig function. Example: ```html <html> <head> (...) <script src="{{ asset('bundles/exapmlebundle/js/jquery/jquery.min.js') }}" type="text/javascript"></script> {{ listing_scripts() }} (...) </head> <body> (...) </body> </html>
- 您的列表已准备好使用 :)
用法
- 在控制器中创建新表。
要创建列表,只需在控制器中获取 listing 服务并将其传递给您的列表类型对象。示例
/** * @Route("/user/list") * @Template() */ public function listAction(Request $request) { // Creates new listing object: $list = $this->get('listing')->createListing(new UserListing(), array( 'request' => $request )); // Handle ajax request that provide data to listing: if ($request->isXmlHttpRequest()) { return $list->createResponse($request); } // Pass ListView object to your template: return array( 'list' => $list->createView() ); }
如您所见,列表的用法与 Symfony 表单组件非常相似。作为传递给 createListing 方法的选项之一,Request 对象用于获取来自您站点的任何数据,例如筛选器、按列排序等...
- 创建自己的 ListingType
创建新的列表类型看起来与创建 symfony 表单类似。示例
namespace Td\UserBundle\Listing; use PawelLen\DataTablesListing\Type\AbstractType; use PawelLen\DataTablesListing\Filters\FilterBuilderInterface; use PawelLen\DataTablesListing\Listing\ListingBuilderInterface; class UserListing extends AbstractType { public function buildFilters(FilterBuilderInterface $builder, array $options) { $builder->add('name', 'text', array( 'label' => 'User name', 'required' => false, 'filter' => array( 'property' => 'name', 'expression' => 'c.name LIKE :name' ) )); $builder->add('email', 'text', array( 'label' => 'Email', 'required' => false, 'filter' => array( 'expression' => 'c.shortName LIKE :shortName' ) )); } public function buildListing(ListingBuilderInterface $builder, array $options) { $builder->add('id', 'column', array( 'label' => 'Id' )); $builder->add('name', 'column', array( 'label' => 'User name' )); $builder->add('email', 'column', array( 'label' => 'Email' )); } public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'class' => 'TdUserBundle:User' )); } public function getName() { return 'my_list'; } }
这将创建具有两个筛选字段和三个列的用户列表。在 setDataOptions 方法中指定数据源。您还可以使用 "query_builder" 选项代替单个实体选项,并提供查询构建器接口以访问更复杂的查询,例如带有连接的查询。
- 模板
要渲染创建的列表,必须将 ListingView 对象传递到您的模板中:示例
{% extends "PanelBundle::base_template.html.twig" %} {% form_theme list.filters _self %} {% block _my_list_widget %} <div class="row"> <div class="col-md-6"> {{ form_row(form.name) }} </div> <div class="col-md-6"> {{ form_row(form.email) }} </div> </div> {% endblock _my_list_widget %} {% block content_body %} {{ listing(list) }} {% endblock %}
要渲染整个列表,您可以使用 listing() twig 函数。此示例还展示了如何覆盖筛选器模板。请注意,块名称前面有一个前置下划线。
函数
- 创建链接
要创建链接,需要在 buildListing 方法内部添加 link 选项。
$builder->add('name', 'column', array( 'label' => 'User name', 'link' => array( 'route' => 'user_edit', 'params' => array( 'user_id' => 'id' ) ) ));
where: id 是一个 propertyPath 字符串。 route 是路由名称,params 是用于生成Url函数的参数
- 使用 QueryBuilder
要使用查询构建器,请使用 query_builder 选项而不是类。
public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'query_builder' => function(QueryBuilder $builder) { $builder->select('u, a, t') ->from('TdUserBundle:Contractor', 'u') ->leftJoin('u.address', 'a') ->leftJoin('u.type', 't') ->where('u.deletedAt IS NULL'); } )); }
或
public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'class' => 'TdUserBundle:User', 'query_builder' => function(EntityRepository $er) { return $er->createQueryBuilder('u') ->where('u.deletedAt IS NULL'); } )); }
- 使用筛选器
默认情况下,当构建筛选器表单时,您不需要定义任何筛选器,您可以将空数组作为筛选器选项传递,在这种情况下将执行默认搜索。默认搜索使用 "name LIKE %PHRASE%" sql 查询,其中 name 是筛选器名称,PHRASE 是输入值的值。要使用自定义筛选器,只需将 DQL 表达式传递给筛选器选项。示例
$builder->add('name', 'text', array( 'label' => 'User name', 'required' => false, 'filter' => array( 'expression' => 'u.name LIKE :name', 'eval' => '%like%' ) ))
where: expression 是 DQL 表达式,您可以使用参数多次,例如:"u.firstname LIKE :name OR u.lastname LIKE :name"。 eval 不是必需的参数,它用于修改从筛选器表单传递的值
注意: :name 必须始终与筛选器名称相同(当前版本)
- 使用筛选器时使用查询修改
在某些情况下,您的列表非常简单,但在某些情况下,当您使用某些筛选器时,您必须添加一些复杂的连接,但在其他情况下,您不希望将这些连接应用于查询,因为它们非常昂贵。示例
$builder->add('languageCode', 'text', array( 'label' => 'Language code', 'required' => false, 'filter' => array( 'expression' => 'l.code LIKE :languageCode', 'eval' => '%like%', 'query_builder' => function(QueryBuilder $builder) { $builder->addSelect('l') ->join('c.language', 'l'); } ) ))
在这个例子中,当用户填写“语言代码”过滤器时,join('c.language') 将被添加,并且语言代码条件将被添加到查询中。
已弃用 参数连接(用于旧版本)
// DEPRECATED: $builder->add('country', 'text', array( 'label' => 'Country name', 'required' => false, 'filter' => array( 'expression' => 'c.name LIKE :country', 'eval' => '%like%', 'join' => array( array('field' => 'u.address', 'alias' => 'a'), array('field' => 'a.country', 'alias' => 'c'), ) ) ))
在这种情况下,只有当用户传递国家过滤器时,才会连接国家,否则不使用连接。
- 按钮
在 buildListing 方法内部,您可以向列表位置添加操作按钮。例如
->add('edit', 'button', array( 'label' => 'Edit', 'route' => 'user_edit', 'params' => array( 'contractor_id' => 'id' ) ))
- 事件
当您需要动态修改/扩展表格行或过滤器搜索条件时,您可以使用列表事件之一。
- 通过 PropertyAccessor 访问自定义属性
当使用 query_bulder 时,您可以使用 property 选项访问从获取的实体中的任何数据。例如:如果您有相关实体,您可以通过属性访问器访问其getter
$builder->add('status', 'text', array( 'label' => 'Status', 'property' => 'status.name', ));
或者您甚至可以访问集合中的第一个对象
$builder->add('user', 'text', array( 'label' => 'First user', 'property' => 'users[0].name', ));
列表允许您使用一些魔法通配符 []*, 以逗号分隔的字符串形式收集集合中的所有值并显示它
$builder->add('user', 'text', array( 'label' => 'Users', 'property' => 'users[*].name', ));
注意: 您在属性选项中只能使用一个通配符。