Laravel Admin 笔记
Laravel Admin可以快速生成增删改查的后台。
安装
1. 初始化
进入项目目录。安装好Laravel,设置好数据库连接后。运行以下命令。
composer require encore/laravel-admin:1.*
php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider"
php artisan admin:install
2. 新建数据表posts模型
新建一个表,比如说posts。然后使用命令php artisan make:model Post
新建Laravel数据库表模型文件App\Models\Post.php
。
3. 新建posts表对应的后台管理控制器
// Mac os、 Linux
php artisan admin:make PostController--model=App\\Models\\Post
// Windows
php artisan admin:make PostController--model=App\Models\Post
以上命令会创建App\Admin\Controllers\PostController.php
。
4. 添加posts的路由
在App\Admin\routes.php
的group里面添加路由$router->resource('posts', PostController::class);
至此就可以直接访问http://localhost:8080/Admin/posts
,会看到列表页。
5. 一些说明
App\Admin\Controllers\PostController.php
里面有三个方法。
- grid:列表页
- detail:详情编辑页
- form:详情查看页
更多选项可以查看官方文档:https://laravel-admin.org/docs/zh/1.x/model-grid
自定义表单
创建表单文件
也就是官方文档中的数据表单。用来创建表单, 可以自定义页面页处理方法。php artisan admin:form Upload
会创建一个表单文件App\Admin\Forms\Upload.php
。
namespace App\Admin\Forms;
use Encore\Admin\Widgets\Form;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use App\Models\Post;
// 这里可以引入任意模型、类文件。
class Upload extends Form
{
/**
* The form title.
*
* @var string
*/
public $title = '这里写标题';
/**
* Handle the form request.
*
* @param Request $request
*
* @return \Illuminate\Http\RedirectResponse
*/
public function handle(Request $request)
{
// 这里任意写表单提交后的处理逻辑
admin_success('Processed successfully.');
return back();
}
/**
* Build a form here.
*/
public function form()
{
// 这里写生成表单html各种方法。模型表单中的组件都可以在这里使用。
// https://laravel-admin.org/docs/zh/1.x/model-form-fields
// 比如:
$this->number('id','Post ID')->rules('required');
$this->radio('upload_method','上传方式')
->options([
'upload_file'=>'上传文件',
'remote_download'=>'远程下载',
'import_url'=>'导入链接'
])->when('upload_file',function(Form $form){
$form->multipleImage('imgs','上传图片')->removable();
})->when('remote_download',function(Form $form){
$form->textarea('remote_download_url','输入要下载的链接')->rows(10);
})->when('import_url',function(Form $form){
$form->textarea('import_url','输入要导入的链接')->rows(10);
})->rules('required');
}
/**
* The data of the form.
*
* @return array $data
*/
public function data()
{
// 这里写表单的默认值
return [
'id' => '123',
'upload_method' => 'upload_file',
];
}
}
在控制器中使用表单
在任意控制器中使用以下代码输出表单
use App\Admin\Forms\Upload;
use App\Http\Controllers\Controller;
use Encore\Admin\Layout\Content;
class UserController extends Controller
{
public function Upload(Content $content)
{
return $content
->title('网站设置')
->body(new Upload());
}
}
表单的各种选项、初始化数值、提交后的处理逻辑都在form文件中定义,而不是在控制器中。
其他问题
模型表格中,时间戳显示问题
如果字段值为时间戳,可以用date方法格式化输出$grid->column('created_at')->date('Y-m-d');
其中格式参数请参考PHP的date函数
但实际上这个功能是用于行内编辑的组件,而不是修改输出格式。作者在其Github的Issue中提到可以用回调函数,也可以使用Trait修改模型的默认时间戳输出格式。
回调函数
$grid->column('updated_at')->display(function ($updated_at) { return date('Y-m-d',strtotime($updated_at)); });
在模型中使用Trait(最好用这个)
// App\Models\Post.php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Encore\Admin\Traits\DefaultDatetimeFormat; class Post extends Model { use DefaultDatetimeFormat; }
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。