You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Laravel Nova中通过Action添加下拉框修改状态

在Laravel Nova Action弹窗中添加状态下拉框实现修改

一、修改已有Action类,添加下拉选择字段

在你的Action文件(比如app/Nova/Actions/UpdateStatus.php)中,通过fields方法添加下拉选择字段,定义状态选项并处理更新逻辑:

use Laravel\Nova\Fields\Select;
use Laravel\Nova\Actions\Action;
use Laravel\Nova\Fields\ActionFields;

class UpdateStatus extends Action
{
    public $name = '更新状态';

    public function fields()
    {
        return [
            Select::make('状态', 'status')
                ->options([
                    'active' => '已激活',
                    'inactive' => '已禁用',
                    'pending' => '待审核',
                ])
                ->required()
                ->default('pending'),
        ];
    }

    public function handle(ActionFields $fields, $models)
    {
        foreach ($models as $model) {
            $model->update([
                'status' => $fields->status,
            ]);
        }

        return Action::message('状态更新成功!');
    }
}

二、将Action注册到Nova资源

打开对应Nova资源文件(比如app/Nova/YourResource.php),在actions方法中注册该Action:

use App\Nova\Actions\UpdateStatus;

class YourResource extends Resource
{
    // 其他资源配置代码

    public function actions(Request $request)
    {
        return [
            new UpdateStatus,
            // 其他已存在的Action
        ];
    }
}

配置完成后,在Nova仪表盘选中目标模型,点击顶部「Actions」按钮选择「更新状态」,弹窗会显示状态下拉框,选择后提交即可完成数据库状态修改。

替代方案:内联快捷操作

如果希望无需弹窗、直接在列表页完成状态切换,可以使用Nova的内联Action:

public function actions(Request $request)
{
    return [
        // 动态切换状态的内联按钮
        Action::make(function ($model) {
            return $model->status === 'active' ? '设为禁用' : '设为激活';
        })
        ->standalone()
        ->action(function ($model) {
            $model->update(['status' => $model->status === 'active' ? 'inactive' : 'active']);
            return Action::message('状态已切换');
        }),
    ];
}

内容的提问来源于stack exchange,提问作者ezad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 02:59:54