Skip to content

Commit b0999aa

Browse files
committed
docs: update quick starter to work with vitejs
1 parent 94275f2 commit b0999aa

File tree

1 file changed

+119
-106
lines changed

1 file changed

+119
-106
lines changed

quick-starter.md

Lines changed: 119 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -1,161 +1,143 @@
11
# DataTables Quick Starter
22

3-
## Create new project
3+
## Create a new Laravel project
44

55
```
66
laravel new datatables
77
cd datatables
8-
cp .env.example .env
9-
php artisan key:generate
108
```
119

12-
## Setup database and ENV configuration
10+
## Setup Laravel UI
1311

14-
Create a new database and update `.env` file and set the datbase credentials.
12+
```shell
13+
composer require laravel/ui --dev
14+
php artisan ui bootstrap --auth
15+
```
1516

16-
## Install package and publish assets
17+
## Install Laravel DataTables
1718

19+
```shell
20+
composer require yajra/laravel-datatables:^9.0
1821
```
19-
composer require yajra/laravel-datatables
20-
php artisan vendor:publish --tag=datatables-buttons
2122

22-
```
23+
## Setup database and ENV configuration
2324

24-
## Setup Laravel UI
25+
Create a new database and update `.env` file and set the database credentials.
2526

26-
```
27-
composer require laravel/ui --dev
28-
php artisan ui bootstrap --auth
27+
```shell
28+
touch database/database.sqlite
2929
```
3030

31-
## Install Datatables.net assets
31+
```dotenv
32+
DB_CONNECTION=sqlite
33+
DB_DATABASE=/absolute/path/to/database/database.sqlite
34+
```
3235

36+
```shell
37+
php artisan migrate
3338
```
34-
yarn add datatables.net-bs4 datatables.net-buttons-bs4 datatables.net-select-bs4 datatables.net-searchpanes-bs4
39+
40+
## Install Laravel DataTables Vite Assets
41+
42+
```shell
43+
npm i laravel-datatables-vite --save-dev
3544
```
3645

37-
> {tip} `datatables.net-select-bs4` and `datatables.net-searchpanes-bs4` are only required if you want to use SearchPanes
46+
This will install the following packages:
47+
48+
1. Bootstrap Icons
49+
2. DataTables with Buttons and Select plugins for Bootstrap 5
50+
3. Laravel DataTables custom scripts
3851

39-
## Register datatables.net assets in bootstrap.js and app.scss
52+
## Register the package js and css
4053

41-
Edit `resources/js/bootstrap.js` and add the following:
54+
Edit `resources/js/app.js` and add the following:
4255

43-
require('bootstrap');
44-
require('datatables.net-bs4');
45-
require('datatables.net-buttons-bs4');
46-
require('datatables.net-select-bs4');
47-
require('datatables.net-searchpanes-bs4');
56+
```js
57+
import './bootstrap';
58+
import 'laravel-datatables-vite';
59+
```
4860

49-
Edit `resources/scss/app.scss` and add the following:
61+
Edit `resources/sass/app.scss` and add the following:
5062

51-
// DataTables
52-
@import "~datatables.net-bs4/css/dataTables.bootstrap4.css";
53-
@import "~datatables.net-buttons-bs4/css/buttons.bootstrap4.css";
54-
@import '~datatables.net-select-bs4/css/select.dataTables.css';
55-
@import '~datatables.net-searchpanes-dt/css/searchPanes.dataTables.css';
63+
```postcss
64+
// Fonts
65+
@import url('https://fonts.bunny.net/css?family=Nunito');
5666
57-
## Compile assets
67+
// Variables
68+
@import 'variables';
5869
59-
```
60-
yarn dev / watch / prod
70+
// Bootstrap
71+
@import 'bootstrap/scss/bootstrap';
72+
73+
// DataTables
74+
@import 'bootstrap-icons/font/bootstrap-icons.css';
75+
@import "datatables.net-bs5/css/dataTables.bootstrap5.min.css";
76+
@import "datatables.net-buttons-bs5/css/buttons.bootstrap5.min.css";
77+
@import 'datatables.net-select-bs5/css/select.bootstrap5.css';
6178
```
6279

63-
## Create controller and DataTable class
80+
## Compile the assets
6481

6582
```
66-
php artisan make:controller UsersController
67-
php artisan datatables:make Users
83+
npm run dev
6884
```
6985

70-
### UsersController
86+
## Create and update UsersDataTable
7187

72-
```php
73-
namespace App\Http\Controllers;
74-
75-
use App\DataTables\UsersDataTable;
88+
Create a new DataTable class:
7689

77-
class UsersController extends Controller
78-
{
79-
public function index(UsersDataTable $dataTable)
80-
{
81-
return $dataTable->render('users.index');
82-
}
83-
}
90+
```shell
91+
php artisan datatables:make Users
8492
```
8593

86-
### UsersDataTable
94+
Then, update the `getColumns()` with the users fields:
8795

8896
```php
8997
namespace App\DataTables;
9098

91-
use App\User;
99+
use App\Models\User;
100+
use Illuminate\Database\Eloquent\Builder as QueryBuilder;
101+
use Yajra\DataTables\EloquentDataTable;
102+
use Yajra\DataTables\Html\Builder as HtmlBuilder;
92103
use Yajra\DataTables\Html\Button;
93104
use Yajra\DataTables\Html\Column;
94-
use Yajra\DataTables\Html\Editor\Editor;
95-
use Yajra\DataTables\Html\Editor\Fields;
96105
use Yajra\DataTables\Services\DataTable;
97106

98107
class UsersDataTable extends DataTable
99108
{
100-
/**
101-
* Build DataTable class.
102-
*
103-
* @param mixed $query Results from query() method.
104-
* @return \Yajra\DataTables\DataTableAbstract
105-
*/
106-
public function dataTable($query)
109+
public function dataTable(QueryBuilder $query): EloquentDataTable
107110
{
108-
return datatables()
109-
->eloquent($query)
110-
->addColumn('action', 'users.action');
111+
return (new EloquentDataTable($query))->setRowId('id');
111112
}
112113

113-
/**
114-
* Get query source of dataTable.
115-
*
116-
* @param \App\User $model
117-
* @return \Illuminate\Database\Eloquent\Builder
118-
*/
119-
public function query(User $model)
114+
public function query(User $model): QueryBuilder
120115
{
121116
return $model->newQuery();
122117
}
123118

124-
/**
125-
* Optional method if you want to use html builder.
126-
*
127-
* @return \Yajra\DataTables\Html\Builder
128-
*/
129-
public function html()
119+
public function html(): HtmlBuilder
130120
{
131121
return $this->builder()
132122
->setTableId('users-table')
133123
->columns($this->getColumns())
134124
->minifiedAjax()
135-
->dom('Bfrtip')
136125
->orderBy(1)
137-
->buttons(
138-
Button::make('create'),
139-
Button::make('export'),
126+
->selectStyleSingle()
127+
->buttons([
128+
Button::make('add'),
129+
Button::make('excel'),
130+
Button::make('csv'),
131+
Button::make('pdf'),
140132
Button::make('print'),
141133
Button::make('reset'),
142-
Button::make('reload')
143-
);
134+
Button::make('reload'),
135+
]);
144136
}
145137

146-
/**
147-
* Get columns.
148-
*
149-
* @return array
150-
*/
151-
protected function getColumns()
138+
protected function getColumns(): array
152139
{
153140
return [
154-
Column::computed('action')
155-
->exportable(false)
156-
->printable(false)
157-
->width(60)
158-
->addClass('text-center'),
159141
Column::make('id'),
160142
Column::make('name'),
161143
Column::make('email'),
@@ -164,26 +146,48 @@ class UsersDataTable extends DataTable
164146
];
165147
}
166148

167-
/**
168-
* Get filename for export.
169-
*
170-
* @return string
171-
*/
172-
protected function filename()
149+
protected function filename(): string
150+
{
151+
return 'Users_'.date('YmdHis');
152+
}
153+
}
154+
```
155+
156+
## Create and update the users controller
157+
158+
Create a new controller and add the following:
159+
160+
```shell
161+
php artisan make:controller UsersController
162+
```
163+
164+
```php
165+
namespace App\Http\Controllers;
166+
167+
use App\DataTables\UsersDataTable;
168+
169+
class UsersController extends Controller
170+
{
171+
public function index(UsersDataTable $dataTable)
173172
{
174-
return 'Users_' . date('YmdHis');
173+
return $dataTable->render('users.index');
175174
}
176175
}
177176
```
178177

179-
## Update app layout
178+
## Update the default app layout
180179

181-
Add scripts before the body end tag of `resources/views/layouts/app.blade.php`
180+
Add `@stack('scripts')` before the body end tag of `resources/views/layouts/app.blade.php`
182181

183182
```
184-
<script src="{{ mix('js/app.js') }}"></script>
185-
<script src="{{ asset('vendor/datatables/buttons.server-side.js') }}"></script>
183+
....
184+
<main class="py-4">
185+
@yield('content')
186+
</main>
187+
</div>
186188
@stack('scripts')
189+
</body>
190+
</html>
187191
```
188192

189193
## Create users index file
@@ -194,11 +198,18 @@ Create new file: `resources/views/users/index.blade.php`.
194198
@extends('layouts.app')
195199

196200
@section('content')
197-
{{$dataTable->table()}}
201+
<div class="container">
202+
<div class="card">
203+
<div class="card-header">Manage Users</div>
204+
<div class="card-body">
205+
{{ $dataTable->table() }}
206+
</div>
207+
</div>
208+
</div>
198209
@endsection
199210

200211
@push('scripts')
201-
{{$dataTable->scripts()}}
212+
{{ $dataTable->scripts(attributes: ['type' => 'module']) }}
202213
@endpush
203214
```
204215

@@ -207,7 +218,9 @@ Create new file: `resources/views/users/index.blade.php`.
207218
Update `routes/web.php`.
208219

209220
```php
210-
Route::get('/users', 'UsersController@index')->name('users.index');
221+
use App\Http\Controllers\UsersController;
222+
223+
Route::get('/users', [UsersController::class, 'index'])->name('users.index');
211224
```
212225

213226
## Create dummy data using tinker
@@ -216,7 +229,7 @@ Route::get('/users', 'UsersController@index')->name('users.index');
216229
php artisan tinker
217230

218231
Psy Shell v0.9.9 (PHP 7.2.22 — cli) by Justin Hileman
219-
>>> factory('App\User', 100)->create()
232+
>>> User::factory(100)->create()
220233
```
221234

222235
## Access Users DataTables

0 commit comments

Comments
 (0)