Laravel ATK
Laravel ATK is a Laravel integration package for Agile UI & Agile Data., (*1)
Installation
Begin by installing this package through Composer. Run this command from the Terminal:, (*2)
composer require joseph-montanez/laravel-atk
Adding Middleware
Agile UI can terminate before $app->run()
is ever called. As of right now this means an exception is thrown, so to catch the exception and return the response, Laravel's Middleware is needed., (*3)
Edit app/Http/Kernel.php
, (*4)
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
//....
/**
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
//....
// Add this middleware line to web
\Atk\Laravel\Middleware\AgileUiTerminated::class,
],
Usage
Agile UI Integration
This library is an app layer designed for Laravel. You need to use this app layer in order to leverage Agile UI within a controller. If you don't you get 500 errors, cookies and/or sessions may not save and URLs will have .php
added to them., (*5)
1. Initialize Agile UI
Normally to initialize Agile UI, you call the following code:, (*6)
$app = new \atk4\ui\App();
But since there is a custom app layer you have two options:, (*7)
//-- Directly call the integrated app class
$app = new \Atk\Laravel\Ui\App(['title' => 'My Admin']);
//-- Using Laravel's service provider to keep track of app instance
$app = app()->make(\Atk\Laravel\Ui\App::class, ['title' => 'My Admin']);
2. Using Agile UI Within A Controller
To get Agile UI to render you need to return a response, as echoing output has been disabled., (*8)
class RoleController
{
public function index(Request $request, DB $db, Common $ui)
{
$app = app()->make(\Atk\Laravel\Ui\App::class, ['title' => 'My Admin']);
/**
* The List Header
*
* @var \atk4\ui\Header $header
*/
$header = $ui->app->add('Header', ['Hello There!']);
return response($app->run());
}
}
3. Using Laravel's Names Routes inside Link
If you depend on Laravel's route named generator then you'll need to use this package's varient of Link. This allows a callback with the record / row data to be passed into your route., (*9)
/**
* The User Grid
*
* @var \atk4\ui\Grid $grid
*/
$grid = $userListColumn->add('Grid');
$grid->setModel(new User($atkDb), ['name', 'email', 'phone', 'created_at']);
$grid->addDecorator(
'name',
new \Atk\Laravel\Ui\TableColumn\Link(null, [], function ($row) {
return route('admin.user.edit', ['id' => $row['id']]);
})
);
Agile Database Connection
If you are planning on using Agile Data, then you can use the service provide to take the existing database connection and pass it into Agile Data., (*10)
$atkDb = app()->make(\Atk\Laravel\Data\Persistence_SQL::class);
/**
* @var \atk4\ui\CRUD $crud
*/
$crud = $app->add('CRUD');
$crud->setModel(new Permission($atkDb), ['name', 'group_name', 'guard_name', 'created_at']);