samvaughton / ldt
Laravel 4 DataTables 库,用于处理服务器端调用。
Requires
- php: >=5.3.0
- illuminate/database: 4.1.*
Requires (Dev)
- mockery/mockery: dev-master@dev
- phpunit/phpunit: 3.7.*
This package is not auto-updated.
Last update: 2024-09-24 02:03:30 UTC
README
该库用于处理客户端请求的服务器端处理。它旨在与现有的 DataTable 包不同,采用不同的方法,从而提供更大的灵活性。
Composer
"require": { "samvaughton/ldt": "0.1.*" }
然后运行 composer update
。
简单示例
$customers = \Customer::select('id', 'name', 'email', 'phone', 'date_registered'); $dth = new DataTable( new LaravelBuilder($customers), new Request(\Input::all()), array( new Column('id'), new Column('name', array('searchable' => true)), new Column('email', array('searchable' => true)), new Column('phone'), new Column('date_registered', array( 'rowProcessor' => new \DateColumnProcessor() )), new Column('actions', array( 'type' => Column::TYPE_STATIC, 'rowProcessor' => function($value, $row, $originalRow) { return sprintf( '<a href="/customer/edit/%s">Edit</a>', $row['id'] ); } ) ) ); return $dth->make();
我已经通过 use
导入了必要的命名空间路径,包括 DataTable
、LaravelBuilder
、Request
和 Column
。 DateColumnProcessor
是一个自定义类,您可以在 Column
命名空间中查看示例。
这里有很多操作,但它非常易于阅读。 DataTable
类接受三个参数。一个实现了 BuilderInterface
的类(已为 Laravel 建立了一个),一个处理客户端请求解析的 Request
类,以及一个用户可见的列数组。
前两个参数在 99% 的情况下将保持不变。
列
列类接受两个参数,第一个是必需的。它可以是字符串或数组,这取决于列的复杂性。
每个列可以是 动态的 或 静态的。动态列是从数据源开始的列。而静态列是在获取结果后附加的,例如包含编辑、删除等按钮的操作列。
别名
如果您在查询中使用别名并执行搜索,则需要使用数组定义 SQL 列的别名。以下是一个示例来澄清这一点。
$query = DB::table('customers')->select('customers.name AS customerName'); $dth = new DataTable( new LaravelBuilder($customers), new Request(\Input::all()), array( new Column(array('customerName', 'customers.name'), array( 'searchable' => true )) ) );
选择语句使用别名,因为 MySQL 不能在 WHERE
子句中使用别名,我们必须使用其原始列名 customers.name
。否则,生成的 WHERE
SQL 将类似于以下内容:
WHERE `customerName` LIKE '%john doe%'
这是非法的。
选项
列类具有默认选项,如下所示,并进行了说明,这些选项可以通过如上例所示的第二个参数设置。
'type' => self::TYPE_DYNAMIC 'sortable' => true 'searchable' => false 'rowProcessor' => false 'filterTermProcessor' => false 'filterQueryProcessor' => false
type
可以是TYPE_DYNAMIC
或TYPE_STATIC
。sortable
和searchable
是布尔值(true/false)。rowProcessor
是一个回调 / 实现RowProcessorInterface
的类。filterTermProcessor
是一个回调 / 实现FilterTermProcessorInterface
的类。filterQueryProcessor
是一个回调 / 实现FilterQueryProcessorInterface
的类。这更为高级,允许您定义自己的 SQL 来进行过滤。
处理器
rowProcessor
选项允许您针对每个列的数据运行一个函数,这在需要附加一些操作按钮或将 Unix 时间戳转换为更易读的日期的情况下很有用。
new Column('actions', array( 'type' => Column::TYPE_STATIC, 'rowProcessor' => function($value, $row, $originalRow) { return sprintf( '<a href="/customer/edit/%s">Edit</a>', $row['id'] ); } )
这是一个静态列,为每一行附加一个编辑按钮,它利用了来自 $row
数组的 customers id
。您可能想知道 $originalRow
是什么,这是一个未修改的行,包含您的选择语句中的每个列。使用上述代码,如果我们修改 id
列并将其值设置为 null
,则此处理器将返回以下内容:
<a href="/customer/edit/">Edit</a>
由于在这次修改之前已经修改了 id
列。这里我们可以使用 $originalRow['id']
来获取未更改的值。
如果您尝试使用不在列数组中定义的列,则必须使用 $originalRow
,因为这些列不包括在 $row
中。
除了传递回调函数之外,您还可以传递一个实现了 RowProcessorInterface
的类。
<?php namespace \Samvaughton\Ldt; class ExampleColumnProcessor implements RowProcessorInterface { /** * This will simply append the date to the column. */ public function run($value, $row, $originalRow) { return sprintf("%s - %s", $value, date("Y-m-d")); } }
列实例化可能看起来像这样
new Column('date', array( 'type' => Column::TYPE_STATIC, 'rowProcessor' => new \Samvaughton\Ldt\ExampleColumnProcessor )
filterTermProcessor
选项与 rowProcessor
类似,但它修改了在查询以获取结果之前执行的搜索项。例如,如果您只想让用户以小写搜索,则可以提供执行此操作的回调/类。
new Column('name', array( 'filterTermProcessor' => function($term) { return strtolower(trim($term)); } )
您可以在 Samvaughton\Ldt\Column
命名空间中找到这些处理器的示例。
贡献
我很希望人们能帮助为这个库做出贡献,发送一个拉取请求,我会查看的!
待办事项
- 更多测试
- 更好的文档