<?php
namespace App\Admin\Controllers;
use App\Models\User;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Encore\Admin\Show;
class UserController extends AdminController
{
protected $title ='Users';
protected function grid()
{
$grid = new Grid(new User());
$grid->column('id', __('Id'));
$grid->column('name', __('Name'));
$grid->column('email', __('Email'));
$grid->column('password', __('Password'));
$grid->column('created_at', __('Created at'));
$grid->column('updated_at', __('Updated at'));
return $grid;
}
protected function detail($id)
{
$show = new Show(User::findOrFail($id));
$show->field('id', __('Id'));
$show->field('name', __('Name'));
$show->field('email', __('Email'));
$show->field('password', __('Password'));
$show->field('created_at', __('Created at'));
$show->field('updated_at', __('Updated at'));
return $show;
}
protected function form()
{
$form = new Form(new User());
$form->textarea('name', __('Name'));
$form->textarea('email', __('Email'));
$form->textarea('password', __('Password'));
return $form;
}
}
All methods on sample are protected, means they are not accessible by public, so we know the public methods are surely located in adminController. Let's open up adminController.
<?php
namespace Encore\Admin\Controllers;
use Encore\Admin\Layout\Content;
use Illuminate\Routing\Controller;
class AdminController extends Controller
{
use HasResourceActions;
/**
* Title for current resource.
*
* @var string
*/
protected $title = 'Title';
/**
* Set description for following 4 action pages.
*
* @var array
*/
protected $description = [
// 'index' => 'Index',
// 'show' => 'Show',
// 'edit' => 'Edit',
// 'create' => 'Create',
];
/**
* Get content title.
*
* @return string
*/
protected function title()
{
return $this->title;
}
/**
* Index interface.
*
* @param Content $content
*
* @return Content
*/
public function index(Content $content)
{
return $content
->title($this->title())
->description($this->description['index'] ?? trans('admin.list'))
->body($this->grid());
}
/**
* Show interface.
*
* @param mixed $id
* @param Content $content
*
* @return Content
*/
public function show($id, Content $content)
{
return $content
->title($this->title())
->description($this->description['show'] ?? trans('admin.show'))
->body($this->detail($id));
}
/**
* Edit interface.
*
* @param mixed $id
* @param Content $content
*
* @return Content
*/
public function edit($id, Content $content)
{
return $content
->title($this->title())
->description($this->description['edit'] ?? trans('admin.edit'))
->body($this->form()->edit($id));
}
/**
* Create interface.
*
* @param Content $content
*
* @return Content
*/
public function create(Content $content)
{
return $content
->title($this->title())
->description($this->description['create'] ?? trans('admin.create'))
->body($this->form());
}
}
We can see there are four public methods, index, show, edit, and create respectively.
1) index build listing with use of grid object.
2) show build details of row.
3) edit build edit form.
4) create build add form.
based on sample from https://laravel-admin.org/docs/en/quick-start.
All methods on sample are protected, means they are not accessible by public, so we know the public methods are surely located in adminController. Let's open up adminController.
We can see there are four public methods,
index
,show
,edit
, andcreate
respectively. 1)index
build listing with use of grid object. 2)show
build details of row. 3)edit
build edit form. 4)create
build add form.now open up parent class (https://github.com/z-song/laravel-admin/blob/v1.8.19/src/Controllers/HasResourceActions.php) and you will see there are another three new public methods,
update
,store
&destroy
.5)
update
update existing record. 6)store
add new record. 7)destroy
delete a row.