Pec*_*277 6 php datatables laravel
我使用 laravel 5.4 和最新版本的 yajra/laravel-datatables 作为服务。
我让它在页面上的一个数据表上运行良好。我想创建一个包含不相关表的仪表板。用户、产品、预订等
我希望我的控制器看起来像这样:
public function index(ProductsDataTable $productDatatable, UsersDataTable $userDatatable)
{
$user = Auth::user();
$products = $user->products;
return view('admin.dashboard', compact('products', 'user', 'productDatatable', 'userDatatable'));
}
Run Code Online (Sandbox Code Playgroud)
在我的刀刃上做
@section('content')
{!! $productDatatable->table() !!}
{!! $userDatatable->table() !!}
@endsection
@push('scripts')
{!! $dataTable->scripts() !!}
@endpush
Run Code Online (Sandbox Code Playgroud)
然而这显然是行不通的。我不确定如何继续。
我尝试为每个数据表创建一条路线,但不确定如何从仪表板控制器引用它。
小智 6
我确信有一种更好的方法可以在一个视图中实现多个表,但这是我在审查此后想到的。评论/改进将受到高度赞赏。
控制器
控制器将在方法中渲染一次表,但将从方法或方法index()中获取数据。getUsers()getProducts()
// DashboardController.php
public function index(UsersDataTable $usersDataTable, ProductsDataTable $productsDataTable)
{
return view('dashboard.index', [
'usersDataTable' => $usersDataTable->html(),
'productsDataTable' => $productsDataTable->html()
]);
}
//Gets Users JSON
public function getUsers(UsersDataTable $usersDataTable)
{
return $usersDataTable->render('admin.dashboard');
}
//Gets Products JSON
public function getProducts(ProductsDataTable $productsDataTable)
{
return $productsDataTable->render('admin.dashboard');
}
Run Code Online (Sandbox Code Playgroud)
路线
添加两个额外的路由,用于获取用户和项目数据。
// web.php
Route::get('/', 'DashboardController@index')->name('dashboard.index');
Route::get('projects', 'DashboardController@getProjects')->name('dashboard.projects');
Route::get('users', 'DashboardController@getUsers')->name('dashboard.users');
Run Code Online (Sandbox Code Playgroud)
数据表服务类
对于UsersDataTable和ProductsDataTable服务类别,请包括我们上面创建的相关路线。
// UsersDataTable.php
public function html()
{
return $this->builder()
->minifiedAjax( route('dashboard.users') );
}
Run Code Online (Sandbox Code Playgroud)
看法
// dashboard.blade.php
@section('content')
{!! $productsDataTable->table() !!}
{!! $usersDataTable->table() !!}
@endsection
@push('scripts')
{!! $productsDataTable->scripts() !!}
{!! $usersDataTable->scripts() !!}
@endpush
Run Code Online (Sandbox Code Playgroud)
向包的创建者提交了问题。这是他的回应:
不幸的是,DataTable 服务类被设计为处理单个实例。但是,我认为我们可以通过在请求中添加额外的查询参数来解决这个问题,以便我们识别正在请求哪个类来处理该请求。
也许像下面这样:
public function index(ProductsDataTable $productDatatable, UsersDataTable $userDatatable)
{
if (request()->has('product') {
return $productDatatable->render('view');
}
if (request()->has('user') {
return $productDatatable->render('view');
}
$user = Auth::user();
$products = $user->products;
return view('admin.dashboard', compact('products', 'user', 'productDatatable', 'userDatatable'));
}
Run Code Online (Sandbox Code Playgroud)