前言#

    本章节内容只包含 1.x 版本中 API 改动的部分,不包含新增特性或对用户使用无影响的改动说明, 2.0 的具体版本变化说明请参考 2.0 有哪些变化?

    预计升级时间:60 分钟

    1. 创建新分支,备份配置文件#

    创建一个新的分支,然后备份配置文件 config/admin.php 命名为 config/admin.bak.php,方便后续对比配置变动。

    2. 更新 composer 依赖#

    先卸载 1.x 版本

    1. composer remove dcat/laravel-admin

    再安装

    1. composer require dcat/laravel-admin:2.*”

    如果这一步出现报错,则更改 composer.json 的参数 minimum-stability 的值为 dev

    安装成功后

    1. 删除 public/vendors 目录
    2. 重新发布资源 php artisan admin:publish —force
    3. 根据上面备份后的配置文件,把修改过的参数写到新的配置文件 config/admin.php 中,这里需要注意的是 1.x 的默认主题色是 indigo(已被废弃),在新版本中已经替换成 default
    4. 调整语言包,新版本中语言包目录由 zh-CN 变成了 zh_CN,需要把自定义的翻译文件移动到新目录,并且 菜单标题 的翻译也独立出来到 menus.php 中了
    5. 运行数据库迁移命令命令 php artisan migrate ,新版本中新增了两个表 admin_settings 以及 admin_extensions

    3. 全局更改命名空间#

    1. 全局搜索命名空间 Dcat\Admin\Controllers 并替换为 Dcat\Admin\Http\Controllers
    2. 全局搜索命名空间 Dcat\Admin\Auth 并替换为 Dcat\Admin\Http\Auth

    4. 表格部分变动#

    1. 字段隐藏功能调整,旧版本 responsive 方法已废弃,在新版本中开启字段隐藏功能方法如下

    1. // 开启字段选择器功能
    2. $grid->showColumnSelector();
    3. // 设置默认隐藏字段
    4. $grid->hideColumns([field1, ...]);

    2. 表格 collectionfetching 等方法已被移除,在新版本中可以通过下面的事件代替

    1. use Dcat\Admin\Grid;
    2. use Illuminate\Support\Collection;
    3. // 使用 Grid\Events\Fetched 事件代替 collection
    4. $grid->listen(Grid\Events\Fetched::class, function ($grid, Collection $rows) {
    5. $rows->transform(function ($row) {
    6. // 更改行数据
    7. $row[name] = $row[first_name]. .$row[last_name];
    8. return $row;
    9. });
    10. });
    11. // 使用 Grid\Events\Fetching 事件代替 fetching
    12. $grid->listen(Grid\Events\Fetching::class, function ($grid) {
    13. });

    3. 表格行相关闭包中允许使用模型

    1. $grid->column(avatar)->display(function ({
    2. // 可直接访问模型相关方法
    3. return $this->getAvatar();
    4. });

    4. 设置路由前缀方法由 resource 调整为 setResource

    1. $grid->setResource(auth/users);

    5. 树形表格 tree 方法即将被废弃,将会移动到扩展中心

    5. 表单部分变动#

    1. 调整表单处理响应方法,旧版本中的 successerrorredirect 以及 location 方法已被移除,
    2.0 中我们让表单的响应方法和 action 的响应方法统一了起来,详细用法请参考文档 表单响应,示例

    1. $form->saving(function (Form $form) {
    2. return $form
    3. ->response()
    4. ->success(‘保存成功’)
    5. ->script(console.log(“执行JS代码”)’)
    6. ->redirect(auth/users);
    7. });

    如果是在工具表单中,用法如下

    1. public function handle(array $input)
    2. {
    3. ...
    4. return $this
    5. ->response()
    6. ->alert()
    7. ->success(‘成功’)
    8. ->detail(‘详细内容’);
    9. }

    2. 调整表单 block 布局功能,并废弃 setDefaultBlockWidth 方法,详细用法请参考文档 表单 block 布局,示例

    1. $form->block(8, function (Form\BlockForm $form) {
    2. $form->title(‘基本设置’);
    3. $form->showFooter();
    4. $form->width(9, 2);
    5. $form->column(6, function (Form\BlockForm $form) {
    6. $form->display(id);
    7. $form->text(name);
    8. $form->email(email);
    9. $form->image(avatar);
    10. $form->password(password);
    11. });
    12. $form->column(6, function (Form\BlockForm $form) {
    13. $form->text(username);
    14. $form->email(mobile);
    15. $form->textarea(description);
    16. });
    17. });
    18. $form->block(4, function (Form\BlockForm $form) {
    19. $form->title(‘分块2);
    20. $form->text(nickname);
    21. $form->number(age);
    22. $form->radio(status)->options([1 => ‘默认’, 2 => ‘冻结’])->default(1);
    23. $form->next(function (Form\BlockForm $form) {
    24. $form->title(‘分块3);
    25. $form->date(birthday);
    26. $form->date(created_at);
    27. });
    28. });

    3. 废弃表单直接提交,只保留 ajax 提交的方式,并重命名 disableAjaxSubmit 方法为 ajax

    1. $form->ajax(false);

    4. 废弃分步表单,新版本请使用分步表单扩展代替

    6.map 以及 listboxslider 也即将废弃,并移动扩展中心

    7. 表单字段扩展功能变动,具体请参考文档表单字段扩展章节

    6. 数据仓库部分变动#

    1. 数据仓库的接口命名做了简化处理,新的 interface 如下

    1. interface Repository
    2. {
    3. /
    4. 获取主键名称.
    5. @return string
    6. /
    7. public function getKeyName();
    8. /
    9. 获取创建时间字段.
    10. @return string
    11. /
    12. public function getCreatedAtColumn();
    13. /
    14. 获取更新时间字段.
    15. @return string
    16. /
    17. public function getUpdatedAtColumn();
    18. /
    19. 是否使用软删除.
    20. @return bool
    21. /
    22. public function isSoftDeletes();
    23. /
    24. 获取Grid表格数据.
    25. @param Grid\Model $model
    26. @return \Illuminate\Contracts\Pagination\LengthAwarePaginator|Collection|array
    27. /
    28. public function get(Grid\Model $model);
    29. /
    30. 获取编辑页面数据.
    31. @param Form $form
    32. @return array|\Illuminate\Contracts\Support\Arrayable
    33. /
    34. public function edit(Form $form);
    35. /
    36. 获取详情页面数据.
    37. @param Show $show
    38. @return array|\Illuminate\Contracts\Support\Arrayable
    39. /
    40. public function detail(Show $show);
    41. /
    42. 新增记录.
    43. @param Form $form
    44. @return mixed
    45. /
    46. public function store(Form $form);
    47. /
    48. 查询更新前的行数据.
    49. @param Form $form
    50. @return array|\Illuminate\Contracts\Support\Arrayable
    51. /
    52. public function updating(Form $form);
    53. /
    54. 更新数据.
    55. @param Form $form
    56. @return bool
    57. /
    58. public function update(Form $form);
    59. /
    60. 删除数据.
    61. @param Form $form
    62. @param array $deletingData
    63. @return mixed
    64. */
    65. public function delete(Form $form, array $deletingData);
    66. /
    67. 查询删除前的行数据.
    68. @param Form $form
    69. @return array|\Illuminate\Contracts\Support\Arrayable
    70. /
    71. public function deleting(Form $form);
    72. }

    2.EloquentRepository::eloquent() 重命名为 EloquentRepository::model()

    7.Section 变动#

    在新版本中 AdminSection 已被移除,请使用 Dcat\Admin\Admin::SECTION 常量代替

    1. use Dcat\Admin\Admin;
    2. admin_inject_default_section(Admin::SECTION[HEAD], function () {
    3. return ...;
    4. });

    8. 扩展#

    扩展相关变动请参考文档扩展

    9. 登录逻辑#

    1. 登录模板,如果你在旧项目中自定义过登录模板,则需要调整登录模板中的 JS 代码

    1. Dcat.ready(function () {
    2. // ajax表单提交
    3. $(‘#login-form).form({
    4. validate: true,
    5. });
    6. });

    2. 登录逻辑,如果重写过登录逻辑,则最后登录成功的响应方法需要使用 sendLoginResponse

    10. 其他变动#

    1. 资源注册

    1. use Dcat\Admin\Admin;
    2. // 注册资源路径别名
    3. Admin::asset()->alias(test, assets/test);
    4. Admin::asset()->alias(‘名称’, [
    5. js => [
    6. // @test 会判定为别名
    7. @test/test.js,
    8. ],
    9. css => [
    10. @test/test.css,
    11. ],
    12. ]);
    13. // 加载资源
    14. Admin::asset()->require(‘@名称’);
    15. // 仅加载 js
    16. Admin::js(‘@名称’);
    17. // 仅加载 css
    18. Admin::css(‘@名称’);