gridの\Encore\Admin\Grid\Displayers\ActionsをoverrideしてCustomActionsを作る
CustomActions.php
namespace App\Admin\Controllers;
use Encore\Admin\Admin;
class CustomActions extends \Encore\Admin\Grid\Displayers\Actions
{
protected $actions = ['edit'];
protected function renderEdit()
{
if(false !== strpos($_SERVER["REQUEST_URI"], env('ADMIN_ROUTE_PREFIX', 'admin')."/auth")){
return <<<EOT
<a href="{$this->getResource()}/{$this->getRouteKey()}/edit" class="{$this->grid->getGridRowName()}-edit">
<i class="fa fa-edit"></i>
</a>
EOT;
}else{
$this->setupEditScript();
return <<<EOT
<a href="{$this->getResource()}/" class="{$this->grid->getGridRowName()}-edit btn btn-xs btn-default">
<i class="fa fa-edit"></i> 編集
</a>
EOT;
}
}
protected function setupEditScript()
{
$trans = [
'delete_confirm' => trans('admin.delete_confirm'),
'confirm' => trans('admin.confirm'),
'cancel' => trans('admin.cancel'),
];
$script = <<<SCRIPT
$('.{$this->grid->getGridRowName()}-edit').click(function (e) {
var id = $(this).closest('tr').find('.column-ID').text();
id = $.trim(id);
var currentHref = $(this).attr('href');
var newHref = currentHref + id + '/edit';
window.location.href= newHref;
});
SCRIPT;
Admin::script($script);
}
}
bootstrap.php
Encore\Admin\Grid\Column::define('__actions__', \App\Admin\Controllers\CustomActions::class);
gridの編集ボタン&それをクリックしたときの挙動を変えたかった時に対応しました。
\Encore\Admin\Grid\Displayers\Actions
をoverrideしたCustomActions
クラスを作って、bootstrap.php
に上記を追記します。