dcat-admin

dcat-admin


v1.x版本升级指南

<h1>v1.x版本升级指南</h1> <h3>前言</h3> <p>本章节内容只包含 <code>1.x</code> 版本中 <code>API</code> 改动的部分,不包含新增特性或对用户使用无影响的改动说明, <code>2.0</code> 的具体版本变化说明请参考 <a href="https://learnku.com/articles/50781?#reply164307">2.0有哪些变化?</a></p> <p><strong>预计升级时间:60 分钟</strong></p> <h3>1.创建新分支,备份配置文件</h3> <p>创建一个新的分支,然后备份配置文件 <code>config/admin.php</code> 命名为 <code>config/admin.bak.php</code>,方便后续对比配置变动。</p> <h3>2.更新composer依赖</h3> <p>先卸载 <code>1.x</code> 版本</p> <pre><code class="language-bash">composer remove dcat/laravel-admin</code></pre> <p>再安装</p> <pre><code>composer require dcat/laravel-admin:&amp;quot;2.*&amp;quot;</code></pre> <p>安装成功后</p> <ol> <li>删除 <code>public/vendors</code> 目录</li> <li>重新发布资源 <code>php artisan admin:publish --force</code></li> <li>根据上面备份后的配置文件,把修改过的参数写到新的配置文件 <code>config/admin.php</code> 中,这里需要注意的是<code>1.x</code>的默认主题色是<code>indigo</code>(已被废弃),在新版本中已经替换成<code>default</code>了</li> <li>调整语言包,新版本中语言包目录由 <code>zh-CN</code> 变成了 <code>zh_CN</code>,需要把自定义的翻译文件移动到新目录,并且 <code>菜单标题</code> 的翻译也独立出来到 <code>menus.php</code> 中了</li> <li>运行数据库迁移命令命令 <code>php artisan migrate</code> ,新版本中新增了两个表<code>admin_settings</code> 以及 <code>admin_extensions</code></li> </ol> <h3>3.全局更改命名空间</h3> <ol> <li>全局搜索命名空间 <code>Dcat\Admin\Controllers</code> 并替换为 <code>Dcat\Admin\Http\Controllers</code></li> <li>全局搜索命名空间 <code>Dcat\Admin\Auth</code> 并替换为 <code>Dcat\Admin\Http\Auth</code></li> </ol> <h3>4.表格部分变动</h3> <p>1.字段隐藏功能调整,旧版本 <code>responsive</code> 方法已废弃,在新版本中开启字段隐藏功能方法如下</p> <pre><code class="language-php">// 开启字段选择器功能 $grid-&amp;gt;showColumnSelector(); // 设置默认隐藏字段 $grid-&amp;gt;hideColumns(['field1', ...]);</code></pre> <p>2.表格 <code>collection</code>、<code>fetching</code> 等方法已被移除,在新版本中可以通过下面的事件代替</p> <pre><code class="language-php">use Dcat\Admin\Grid; use Illuminate\Support\Collection; // 使用 Grid\Events\Fetched 事件代替 collection $grid-&amp;gt;listen(Grid\Events\Fetched::class, function ($grid, Collection $rows) { $rows-&amp;gt;transform(function ($row) { // 更改行数据 $row['name'] = $row['first_name'].' '.$row['last_name']; return $row; }); }); // 使用 Grid\Events\Fetching 事件代替 fetching $grid-&amp;gt;listen(Grid\Events\Fetching::class, function ($grid) { });</code></pre> <p>3.表格行相关闭包中允许使用模型</p> <pre><code class="language-php">$grid-&amp;gt;column('avatar')-&amp;gt;display(function ({ // 可直接访问模型相关方法 return $this-&amp;gt;getAvatar(); });</code></pre> <p>4.设置路由前缀方法由 <code>resource</code> 调整为 <code>setResource</code> </p> <pre><code class="language-php">$grid-&amp;gt;setResource('auth/users');</code></pre> <p>5.树形表格 <code>tree</code> 方法即将被废弃,将会移动到扩展中心</p> <h3>5.表单部分变动</h3> <p>1.调整表单处理响应方法,旧版本中的<code>success</code>、<code>error</code>、<code>redirect</code> 以及 <code>location</code> 方法已被移除, 在 <code>2.0</code> 中我们让表单的响应方法和 <code>action</code> 的响应方法统一了起来,详细用法请参考文档 <a href="response.md">动作和表单响应</a>,示例</p> <pre><code class="language-php">$form-&amp;gt;saving(function (Form $form) { return $form -&amp;gt;response() -&amp;gt;success('保存成功') -&amp;gt;script('console.log(&amp;quot;执行JS代码&amp;quot;)') -&amp;gt;redirect('auth/users'); });</code></pre> <p>如果是在<a href="widgets-form.md">工具表单</a>中,用法如下</p> <pre><code class="language-php">public function handle(array $input) { ... return $this -&amp;gt;response() -&amp;gt;alert() -&amp;gt;success('成功') -&amp;gt;detail('详细内容'); }</code></pre> <p>2.调整表单 <code>block</code> 布局功能,并废弃 <code>setDefaultBlockWidth</code> 方法,详细用法请参考文档 <a href="model-form-layout.md">表单block布局</a>,示例</p> <pre><code class="language-php">$form-&amp;gt;block(8, function (Form\BlockForm $form) { $form-&amp;gt;title('基本设置'); $form-&amp;gt;showFooter(); $form-&amp;gt;width(9, 2); $form-&amp;gt;column(6, function (Form\BlockForm $form) { $form-&amp;gt;display('id'); $form-&amp;gt;text('name'); $form-&amp;gt;email('email'); $form-&amp;gt;image('avatar'); $form-&amp;gt;password('password'); }); $form-&amp;gt;column(6, function (Form\BlockForm $form) { $form-&amp;gt;text('username'); $form-&amp;gt;email('mobile'); $form-&amp;gt;textarea('description'); }); }); $form-&amp;gt;block(4, function (Form\BlockForm $form) { $form-&amp;gt;title('分块2'); $form-&amp;gt;text('nickname'); $form-&amp;gt;number('age'); $form-&amp;gt;radio('status')-&amp;gt;options(['1' =&amp;gt; '默认', 2 =&amp;gt; '冻结'])-&amp;gt;default(1); $form-&amp;gt;next(function (Form\BlockForm $form) { $form-&amp;gt;title('分块3'); $form-&amp;gt;date('birthday'); $form-&amp;gt;date('created_at'); }); });</code></pre> <p>3.废弃表单直接提交,只保留 <code>ajax</code> 提交的方式,并重命名 <code>disableAjaxSubmit</code> 方法为 <code>ajax</code></p> <pre><code class="language-php">$form-&amp;gt;ajax(false);</code></pre> <p>4.废弃分步表单,新版本请使用<a href="https://github.com/dcat-admin/form-step">分步表单扩展</a>代替</p> <p>6.<code>map</code>以及<code>listbox</code>、<code>slider</code>也即将废弃,并移动扩展中心</p> <p>7.表单字段扩展功能变动,具体请参考文档<a href="model-form-field-management.md">表单字段扩展</a>章节</p> <h3>6.数据仓库部分变动</h3> <p>1.数据仓库的接口命名做了简化处理,新的 interface 如下</p> <pre><code class="language-php">interface Repository { /** * 获取主键名称. * * @return string */ public function getKeyName(); /** * 获取创建时间字段. * * @return string */ public function getCreatedAtColumn(); /** * 获取更新时间字段. * * @return string */ public function getUpdatedAtColumn(); /** * 是否使用软删除. * * @return bool */ public function isSoftDeletes(); /** * 获取Grid表格数据. * * @param Grid\Model $model * * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator|Collection|array */ public function get(Grid\Model $model); /** * 获取编辑页面数据. * * @param Form $form * * @return array|\Illuminate\Contracts\Support\Arrayable */ public function edit(Form $form); /** * 获取详情页面数据. * * @param Show $show * * @return array|\Illuminate\Contracts\Support\Arrayable */ public function detail(Show $show); /** * 新增记录. * * @param Form $form * * @return mixed */ public function store(Form $form); /** * 查询更新前的行数据. * * @param Form $form * * @return array|\Illuminate\Contracts\Support\Arrayable */ public function updating(Form $form); /** * 更新数据. * * @param Form $form * * @return bool */ public function update(Form $form); /** * 删除数据. * * @param Form $form * @param array $deletingData * * @return mixed */ public function delete(Form $form, array $deletingData); /** * 查询删除前的行数据. * * @param Form $form * * @return array|\Illuminate\Contracts\Support\Arrayable */ public function deleting(Form $form); }</code></pre> <p>2.<code>EloquentRepository::eloquent()</code> 重命名为 <code>EloquentRepository::model()</code></p> <h3>7.Section变动</h3> <p>在新版本中 <code>AdminSection</code> 已被移除,请使用 <code>Dcat\Admin\Admin::SECTION</code> 常量代替</p> <pre><code class="language-php">use Dcat\Admin\Admin; admin_inject_default_section(Admin::SECTION['HEAD'], function () { return ...; });</code></pre> <h3>8.扩展</h3> <p>扩展相关变动请参考文档<a href="extension-f.md">扩展</a></p> <h3>9.登录逻辑</h3> <p>1.登录模板,如果你在旧项目中自定义过登录模板,则需要调整登录模板中的<code>JS</code>代码</p> <pre><code class="language-js">Dcat.ready(function () { // ajax表单提交 $('#login-form').form({ validate: true, }); });</code></pre> <p>2.登录逻辑,如果重写过登录逻辑,则最后登录成功的响应方法需要使用 <code>sendLoginResponse</code></p> <h3>10.其他变动</h3> <p>1.资源注册</p> <pre><code class="language-php">use Dcat\Admin\Admin; // 注册资源路径别名 Admin::asset()-&amp;gt;alias('test', 'assets/test'); Admin::asset()-&amp;gt;alias('名称', [ 'js' =&amp;gt; [ // @test 会判定为别名 '@test/test.js', ], 'css' =&amp;gt; [ '@test/test.css', ], ]); // 加载资源 Admin::asset()-&amp;gt;require('@名称'); // 仅加载 js Admin::js('@名称'); // 仅加载 css Admin::css('@名称');</code></pre>

页面列表

ITEM_HTML