Laravel 4 DataTables 库,用于处理服务器端调用。

0.1.3 2014-04-15 23:25 UTC

This package is not auto-updated.

Last update: 2024-09-24 02:03:30 UTC


README

Build Status

该库用于处理客户端请求的服务器端处理。它旨在与现有的 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 导入了必要的命名空间路径,包括 DataTableLaravelBuilderRequestColumnDateColumnProcessor 是一个自定义类,您可以在 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_DYNAMICTYPE_STATIC
  • sortablesearchable 是布尔值(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 命名空间中找到这些处理器的示例。

贡献

我很希望人们能帮助为这个库做出贡献,发送一个拉取请求,我会查看的!

待办事项

  • 更多测试
  • 更好的文档