daveawb / datatables
Requires
- php: >=5.4.0
- illuminate/support: 4.1.*
Requires (Dev)
- doctrine/dbal: dev-master
- mockery/mockery: dev-master
- orchestra/support: 2.2.*
- orchestra/testbench: 2.2.*
This package is not auto-updated.
Last update: 2024-09-14 16:18:44 UTC
README
注意:此包已弃用且不再维护。
Laravel-Datatables (自 Laravel 5 弃用)
#介绍 此项目旨在帮助使用由 SpryMedia 编写的出色数据表格 jQuery 插件(http://sprymedia.co.uk/)和 Laravel 4.1 或更高版本的用户。它最初是为 dataTables 1.9.x 编写的,但自从 1.10.x 发布后,现在有了新的 API 和数据结构,将会有更新以允许您在不久的将来使用新的语法。如果您之前没有使用过 datatables,请访问 https://datatables.net.cn/ 了解更多信息。
暂时您需要使用旧的 1.9.x API,它仍然与 1.10.x 兼容。您可以在 http://legacy.datatables.net/ 上找到文档。
支持的 datatables 组件
- 客户端列重新排序
- 按列排序
- 全局搜索
- 在特定列中搜索
- 设置返回的行数
- 过滤行和总行数
支持的功能
- MongoDb 支持
- Eloquent 和查询构建器支持
- 自定义数据库驱动程序支持
- 基本列装饰
- 使用闭包进行自定义列装饰/操作
- 基本多字段支持
- 尚不支持在多个列上进行搜索和排序
上述所有组件均无需额外配置(除了数据库驱动程序)。在未来的版本中,将能够发送每行的命名属性,例如 DT_RowClass
和您希望按行或全局数据返回的任何其他数据。
#要求
-
= PHP 5.4
-
= Laravel 4.1.*
#安装 ##Composer 将以下内容添加到您的 composer.json 文件中
{ "require": { "daveawb/datatables": "0.3.*" }, }
##添加 Laravel 服务提供者 在运行 composer update
之后,您需要添加服务提供者。
打开 config/app.php
并将以下内容添加到服务提供者数组中。
"Daveawb\Datatables\DatatablesServiceProvider"
##发布包配置 从命令行 php artisan config:publish daveawb\datatables
##添加 Laravel 门面(可选)
将以下内容添加到您的 config/app.php
别名数组中。
"Datatable" => "Daveawb\Datatables\Facades\Datatable"
#基本用法
Route::post('datatable', function() { $datatable = App::make("Daveawb\Datatables\Datatable"); $datatable->query(new User()); $datatable->columns(array( "first_name", "last_name", "username", "verified", "created_at", "updated_at" )); return $datatable->result(); });
columns 方法接受一个数组,按您希望发送到客户端的顺序排列。每个字段映射到查询中可用的数据库字段。
query 方法直接映射到正在使用的驱动程序,标准 Eloquent 模型/构建器和查询构建器被接受:Illuminate\Database\Eloquent\Model
或 Illuminate\Database\Eloquent\Builder
示例:传递标准查询构建器。
Route::post('datatable', function() { $datatable = App::make("Daveawb\Datatables\Datatable"); $datatable->query(DB::table('users')); $datatable->columns(array( "first_name", "last_name", "username", "verified", "created_at", "updated_at" )); return $datatable->result(); });
由于 query 方法接受构建器实例,您可以在将其插入到 datatables 包中之前传递一个预定义的查询。
$user = new User(); $datatable->query($user->with('roles'));
或使用标准查询构建器
$datatable->query(DB::table('users')->where('deleted_at', '!=', 'NULL');
##列解释/装饰 有时您会发现需要合并字段的内容或将它们包裹在 HTML 标签中。这就是列解释/装饰的作用。每个装饰/解释都按您声明的顺序执行。如果您在同一个列上使用两个或多个装饰器,上一个操作的结果将是传递给下一个装饰器的值。这将允许您使用几个核心方法构建一些复杂的装饰。
目前,第一个声明的字段被修改以包含两个字段的组合结果。
### 内置方法
- 追加
- 预置
- 合并
#### 追加 追加方法接受两个参数,要追加的值和可选的分隔符。
$datatable->columns(array( // Note the space as second arg to append array("first_name", array("append" => "eats lots of pies, ")) )); // If value of first_name is David the output would be array( // Only the aaData values are shown here "aaData" => array( array( "first_name" => "David eats lots of pies" ) ) );
如果你要追加的数据 === 数据库中的某个键,它将被该值替换
#### 预置 预置方法接受两个参数,要预置的值和可选的分隔符。
$datatable->columns(array( // Note the space as second arg to prepend array("last_name", array("prepend" => "Mr, ")) )); // If value of last_name is Barker the output would be array( // Only the aaData values are shown here "aaData" => array( array( "last_name" => "Mr Barker" ) ) );
如果你要预置的数据 === 数据库中的某个键,它将被该值替换
#### 合并
$datatable->columns(array( // Note the space as the last arg to combine array("first_name", "last_name", array("combine" => "first_name,last_name, ")) ));
我们不是将字符串传递到列中,而是传递一个数组,其中最后一个值总是声明你想要使用的装饰器/解释器的数组以及它们的独特设置。未来的每个解释器都将有单独的文档。目前,只有 combine
是可用的,它接受要合并的字段名称,最后一个值是分隔符。如果数据库返回的值是 first_name = "David"
和 last_name = "Barker"
,上面的代码将产生
array( // Only the aaData values are shown here "aaData" => array( array( "first_name" => "David Barker" ) ) );
你可以合并任意多个字段,你不受两个字段的限制。
#### 链式解释器/装饰器 你可以链任意多个装饰器,解释器略有不同,因为它们有终端和非终端表达式。目前所有解释器都是终端表达式,并且将每个调用视为新的解释。
$datatable->columns(array( array( "first_name", "last_name", array( "combine" => "first_name,last_name, ", "append" => "Mr, ", "prepend" => "BSc(hons), " ) ); )); // The result of the above would be array( // Only the aaData values are shown here "aaData" => array( array( "first_name" => "Mr David Barker BSc(hons)" ) ) );
### 在你的列上使用闭包!为了对特定字段的某些内容有更精细的控制,你可以使用闭包而不是装饰器。你必须 在 任何装饰器/解释器之前声明闭包。另外请注意,你的闭包将在装饰器/解释器 之后 执行。
$datatable->columns(array( array( "first_name", function($field, $databaseRowData) { return sprintf( "A modified first_name field, it was %s before", $databaseRowData->$field ); } ); )); // The result of the above would be array( "aaData" => array( array( "first_name" => "A modified first_name field, it was David before" ) ) );
请注意,到目前为止,第二个字段不受任何搜索、排序或其他数据库相关功能的约束。这将来很可能会被添加。
## 自定义数据库驱动程序 内置驱动程序允许你使用 Eloquent 模型和构建器以及标准查询构建器作为包的基本查询输入。每个驱动程序都扩展了 Daveawb\Datatables\Driver
,它为所有驱动程序设置标准方法,如设置列工厂,并实现抽象方法。
此包包含两个驱动程序
- 默认 Laravel 驱动程序
- MongoDB 驱动程序
可以使用 driver
方法在运行时用任何驱动程序替换默认驱动程序。
## 使用 MongoDB 驱动程序
$datatable = App::make("Daveawb\Datatables\Datatable"); $datatable->driver(new Daveawb\Datatables\Drivers\Mongo());
与使用 query
方法传递 Eloquent 实例或查询构建器的实例相比,MongoDB 有一些不同的选项。
### 配置 如果你还没有发布包的配置,现在是发布的好时机。在命令行中 php artisan config:publish daveawb/datatables
。
配置文件包含你的 MongoDB 数据库、副本集以及多服务器设置,还有授权设置,只需相应地设置配置选项即可。
### 构建查询
#### 使用集合
$datatable->query("collection"); // Pass in a collection name
#### 设置预定义查询数据
$datatable->query(array("collection", function() { return array( '$or' => array( array("first_name" : "David") ) ); });
闭包必须始终返回一个数组
#### 获取结果 其他一切都是一样的,以任何方式设置列、解释器/装饰器,然后只需返回 $datatable->result()
来获取所有以 datatables 风格格式化的结果。
## 创建自定义驱动程序 如果你还没有查看抽象驱动程序类,请查看。确保你的驱动程序实现了所有需要的方法。将来会有一个详细的维基条目介绍如何轻松创建自定义数据库驱动程序。目前,请查看两个预包装驱动程序的工作原理,以了解你的驱动程序如何获取和返回数据。
## 路线图
- 支持 dataTables 1.10.x 选项
- 一个查询扩展,允许在datatables统计数据库字段后对查询进行操作
## 测试
## 更新日志 0.3.1
- 修复了针对Laravel查询构建器的驱动程序错误
- 增加了全面的模块和验收测试,以验证上述功能
- 驱动程序返回原始数据,而不是格式化数据
- 现在响应对象负责格式化数据
- 增加了响应测试
0.3.0
- 增加了配置,现在需要发布配置以设置自定义驱动程序的数据库默认值
- 更新了解释器,以接受字段名称
- 增加了数据库驱动程序接口
- 增加了MongoDB数据库驱动程序
0.2.6
- 增加了追加解释器
- 增加了前置解释器
- 为列增加了闭包功能
0.2.0
- 现在包括列解释器语言和装饰
- 增加了组合解释器
- 现在包括自定义驱动程序创建的驱动程序接口(进行中)
- 修复了多个错误