Laravel 8 如何自定义Artisan命令为维护模式新增调用参数
Laravel自定义维护模式Artisan命令新增参数实现方案
1. 创建自定义命令继承原生Down类
Laravel 自带的down命令由Illuminate\Foundation\Console\DownCommand类提供,首先生成自定义命令文件:
php artisan make:command CustomDownCommand
修改生成的app/Console/Commands/CustomDownCommand.php文件内容:
<?php namespace App\Console\Commands; use Illuminate\Foundation\Console\DownCommand as BaseDownCommand; class CustomDownCommand extends BaseDownCommand { /** * 命令签名:保留原生所有参数,新增自定义--time参数 * * @var string */ protected $signature = 'down {--secret= : 绕过维护模式的访问密钥} {--time= : 自定义维护模式预计持续时长,单位:分钟} {--redirect= : 重定向目标路径} {--retry= : Retry-After响应头值} {--refresh= : 页面自动刷新间隔,单位:秒} {--status= : 维护模式响应状态码} {--render= : 维护页面模板路径}'; /** * 命令描述 * * @var string */ protected $description = '启用应用维护模式,支持自定义持续时长参数'; /** * 执行命令逻辑 * * @return int */ public function handle() { // 执行原生维护模式基础逻辑 parent::handle(); // 处理自定义--time参数 if ($this->option('time')) { // 示例:将预计恢复时间存入缓存,可在维护页读取展示 cache()->put('maintenance_end_time', now()->addMinutes($this->option('time'))); $this->info("维护模式预计持续时长已设置:{$this->option('time')} 分钟"); } return 0; } }
注:--secret为Laravel原生自带参数,上述实现仅新增自定义的--time参数,完全兼容框架原生维护模式的所有特性
2. 替换框架默认命令绑定
打开app/Providers/AppServiceProvider.php,在register方法中添加绑定替换逻辑:
public function register() { // 用自定义命令替换框架原生的down命令 $this->app->extend('command.down', function () { return new \App\Console\Commands\CustomDownCommand; }); }
3. 测试命令调用
配置完成后即可直接运行你需要的命令:
php artisan down --secret=maintenanceSecret --time=10
可选配套处理:退出维护模式时清理缓存
如果需要在执行php artisan up时自动清理存储的维护时长数据,可以同理重写UpCommand,在其handle方法中加入缓存清理代码:
cache()->forget('maintenance_end_time');
内容的提问来源于stack exchange,提问作者sajjad
相关产品推荐
相关产品推荐

