langleyfoxall / react-dynamic-data-table-laravel-api
为 `react-dynamic-data-table` 组件提供 Laravel API 端点响应器。
v5.4.0
2024-07-01 08:24 UTC
Requires
- php: ^7.2||^8.0
- langleyfoxall/helpers-laravel: ^2.0 || ^3.0
- laravel/framework: ^5.1||^6.0||^7.0||^8.0||^9.0||^10.0||^11.0
This package is auto-updated.
Last update: 2024-08-31 08:46:33 UTC
README
本包为 React Dynamic Data Table 组件提供 Laravel API 端点响应器。
安装
composer require langleyfoxall/react-dynamic-data-table-laravel-api
用法
首先,在您的 API 路由文件中创建一个新的路由,用于数据表响应,并将其指向控制器。
在此控制器方法中,创建一个新的 DataTableResponder
,传入您希望返回数据的模型和提供的 Request
对象实例。您可以使用 query
方法指定查询的更改(例如排序或过滤)。如果您想在数据返回前以某种方式修改数据,例如更改属性值或添加自定义属性,可以利用 collectionManipulator
。您还可以使用 setPerPage
方法更改每页显示的记录数。
以下是一个示例用法。
use App\User; use Illuminate\Http\Request; use LangleyFoxall\ReactDynamicDataTableLaravelApi\DataTableResponder; class UsersController extends Controller { public function dataTable(Request $request) { return (new DataTableResponder(User::class, $request)) ->query(function($query) { // Optional, default: none $query->where('name', 'like', 'B%'); }) ->collectionManipulator(function (Collection $collection) { // Optional, default: none $collection->map(function($user) { $user->name = title_case($user->name); }); }) ->setPerPage(10) // Optional, default: 15 ->respond(); } }
在您的前端代码中,现在可以使用 React Dynamic Data Table 包的 AjaxDynamicDataTable
组件来显示数据表。之前定义的 API 路由应作为 apiUrl
属性传递给此组件。
以下是一个示例用法。
import React, { Component } from 'react'; import ReactDOM from 'react-dom'; import AjaxDynamicDataTable from "@langleyfoxall/react-dynamic-data-table/dist/AjaxDynamicDataTable"; export default class Example extends Component { render() { return ( <div className="container"> <AjaxDynamicDataTable apiUrl={'/api/users/data-table'}/> </div> ); } } if (document.getElementById('example')) { ReactDOM.render(<Example />, document.getElementById('example')); }
没有模型
有时您需要创建一个没有模型的数据表(数据是一种聚合类型,因此模型不适用)。
use App\User; use Illuminate\Http\Request; use LangleyFoxall\ReactDynamicDataTableLaravelApi\DataTableResponder; class UsersController extends Controller { public function dataTable(Request $request) { return (new DataTableResponder(DB::table('users')->select(['id', 'name']), $request)) ->query(function($query) { // Optional, default: none $query->where('name', 'like', 'B%'); }) ->collectionManipulator(function (Collection $collection) { // Optional, default: none $collection->map(function($user) { $user->name = title_case($user->name); }); }) ->setPerPage(10) // Optional, default: 15 ->respond(); } }