https://github.com/z-song/laravel-admin/blob/acaf9b164f36fbe82bf400b279489e33d3a93734/src/Grid.php#L537
现在有个奇葩需求,操作里面的动作按钮,要同时显示图标和文字。
。
我想自己Encore\Admin\Grid\Displayers\Actions复制一个修改一下。
像Encore\Admin\Grid\Column::extend('actions', App\Admin\Extensions\Columns\Actions::class);这样扩展它。
另外我有个想法,Encore\Admin\Grid\Displayers\Actions生成url的时候,可不可以在edit/view里面加个特殊参数,这样在首次从list进入edit或view的时候根据这个参数把\URL::previous()保存进session里面,我就可以定义一个'后退'按钮,框架自带的list不好用,不带查询参数。有些时候,用户点进去edit里面编辑,如果修改数据后rules验证不通过或其他原因,他会在edit停留多次,或者它从edit进入view,从view进入eidt。
{$this->getResource()}/{$this->getKey()}?_from_=list
{$this->getResource()}/{$this->getKey()}/edit?_from_=list
目前就可以实现
先自定义一个actions类继承laravel-admin的Encore\Admin\Grid\Displayers\Actions, 比如
<?php
namespace App\Admin\Extensions;
use Encore\Admin\Grid\Displayers\Actions;
class CustomActions extends Actions
{
// 重写renderEdit方法加上`编辑`两个字
protected function renderEdit()
{
return <<<EOT
<a href="{$this->getResource()}/{$this->getKey()}/edit">
<i class="fa fa-edit"></i> 编辑
</a>
EOT;
}
}
然后在grid里面:
// 先关掉laravel-admin内置的操作列
$grid->disableActions();
// 再插入上面自定义的操作列
$grid->column('actions', '操作')->displayUsing(CustomActions::class);
这样也行,就是每个$grid都要写一次,有点麻烦。
@ichynul 提交了一下优化,更新到dev-master版本可以用下面的方式来全局设置
在app/Admin/bootstrap.php里面
use App\Admin\Extensions\CustomActions;
use Encore\Admin\Grid;
Grid::init(function (Grid $grid) {
$grid->actions(CustomActions::class);
});
Most helpful comment
@ichynul 提交了一下优化,更新到dev-master版本可以用下面的方式来全局设置
在app/Admin/bootstrap.php里面