首页 > 解决方案 > 如何覆盖 Laravel Voyager 的 Actions 目录文件?

问题描述

在 Voyager 中用于浏览页面操作列有以下按钮:

删除、查看和编辑

上述按钮的图标值来自存储在/vendor/tcg/voyager/src/Actions/的相应操作文件中使用的 getIcon() 方法

例如:从/vendor/tcg/voyager/src/Actions/DeleteAction.php@getIcon获取的删除按钮图标值

现在我想改变这个值而不触及上面的文件。

我将如何覆盖上面的文件?


经过一些研究,我在下面发现不知何故我将不得不覆盖以下文件:

\vendor\tcg\voyager\Voyager.php

在上面的文件中,DeleteAction 是使用以下代码导入的:

使用 TCG\Voyager\Actions\DeleteAction;

标签: laravel-5.8voyager

解决方案


创建您自己的 Action 类,可能扩展原始 Voyager Action 类:

App\Voyager\Actions\DeleteAction.php

<?php

namespace App\Voyager\Actions;

use TCG\Voyager\Actions\DeleteAction as VoyagerDeleteAction;

class DeleteAction extends VoyagerDeleteAction
{
    public function getIcon()
    {
        return 'my-custom-icon';
    }
}

在您的服务提供商中将默认操作替换为您的操作:

App\Providers\AppServiceProvider.php

<?php

namespace App\Providers;

use App\Voyager\Actions\DeleteAction as MyDeleteAction;
use Illuminate\Support\ServiceProvider;
use TCG\Voyager\Actions\DeleteAction;
use TCG\Voyager\Facades\Voyager;

class AppServiceProvider extends ServiceProvider
{
    ...

    public function boot()
    {
        ...

        Voyager::replaceAction(DeleteAction::class, MyDeleteAction::class);

        ...
    }

    ...
}

你可以在 [voyager]/src/Voyager.php:174 看到方法的来源replaceAction()


推荐阅读