Creating a Laravel Full CRUD with DataTables Editor.
Before we begin, please be reminded that the Editor library that we are going to use here requires a paid license. See DataTables Editor for details.
Pre-requisites
This tutorial requires https://yajrabox.com/docs/laravel-datatables/master/quick-starter.
Install DataTables Editor assets.
yarn add datatables.net-editor datatables.net-editor-bs4 datatables.net-select-bs4
Editor License
Copy and rename your Editor.XX.zip
to Editor.zip
and move it to project folder.
Register postinstall script to package.json
"scripts": { "postinstall": "node ./node_modules/datatables.net-editor/install.js ./Editor.zip", "dev": "npm run development", .....},
Register editor script on resources/js/bootstrap.js
try { window.Popper = require('popper.js').default; window.$ = window.jQuery = require('jquery'); require('bootstrap'); require('datatables.net-bs4'); require('datatables.net-buttons-bs4'); require('datatables.net-select-bs4'); require('datatables.net-editor-bs4');} catch (e) {}
Add editor styles on resources/sass/app.scss
.
@import "~datatables.net-select-bs4/css/select.bootstrap4.css";@import "~datatables.net-editor-bs4/css/editor.bootstrap4.css";
Recompile assets.
yarnyarn watch / dev / prod
Update UsersDataTable and register the Editor buttons.
Note: CREATE button is in conflict with
buttons.server-side.js
. You need to remove the create button or rename it to something else likeadd
button.
DataTable.ext.buttons.add = { className: 'buttons-add', text: function (dt) { return '<i class="fa fa-plus"></i> ' + dt.i18n('buttons.add', 'Create'); }, action: function (e, dt, button, config) { window.location = window.location.href.replace(/\/+$/, "") + '/create'; }};
UsersDataTable.php
Create a new editor instance and add some fields for name and email.
use Yajra\DataTables\Html\Editor\Editor;use Yajra\DataTables\Html\Editor\Fields; ... /** * Build DataTable class. * * @param mixed $query Results from query() method. * @return \Yajra\DataTables\DataTableAbstract */ public function dataTable($query) { return datatables() ->eloquent($query) ->setRowId('id') // Set the RowID ... } public function html() { return $this->builder() ->setTableId('users-table') ->columns($this->getColumns()) ->minifiedAjax() ->dom('Bfrtip') ->orderBy(1) ->buttons( Button::make('create')->editor('editor'), Button::make('edit')->editor('editor'), Button::make('remove')->editor('editor'), Button::make('export'), Button::make('print'), Button::make('reset'), Button::make('reload') ) ->editor( Editor::make() ->fields([ Fields\Text::make('name'), Fields\Text::make('email'), Fields\Password::make('password'), ]) ); }
Create Editor Class to handle CRUD actions.
php artisan datatables:editor Users
Register Editor Route
Edit routes/web.php
and register the store user route.
Route::post('/users', 'UsersController@store')->name('users.store');
Update users controller
namespace App\Http\Controllers; use Illuminate\Http\Request;use App\DataTables\UsersDataTable;use App\DataTables\UsersDataTableEditor; class UsersController extends Controller{ public function index(UsersDataTable $dataTable) { return $dataTable->render('users.index'); } public function store(UsersDataTableEditor $editor) { return $editor->process(request()); }}