Laravel 编码技巧 - Artisan

作者: 温新

图书: 【Laravel 编码技巧】

阅读: 161

时间: 2024-02-29 11:41:25

Artisan 命令参数

在创建 Artisan 命令时,您可以以多种方式询问输入:$this->confirm()$this->anticipate()$this->choice()

// 是或否?
if ($this->confirm('Do you wish to continue?')) {
    //
}

// 带有自动完成选项的开放问题
$name = $this->anticipate('What is your name?', ['Taylor', 'Dayle']);

// 列出的选项之一,带有默认索引
$name = $this->choice('What is your name?', ['Taylor', 'Dayle'], $defaultIndex);

在命令运行没有错误或有任何错误后执行闭包

使用 Laravel 调度器(scheduler),您可以在命令成功运行时执行闭包,使用 onSuccess() 方法,也可以在命令出现错误时执行闭包,使用 onFailure() 方法。

protected function schedule(Schedule $schedule)
{
    $schedule->command('newsletter:send')
        ->mondays()
        ->onSuccess(fn () => resolve(SendNewsletterSlackNotification::class)->handle(true))
        ->onFailure(fn () => resolve(SendNewsletterSlackNotification::class)->handle(false));
}

在特定环境中运行 artisan 命令

掌控您的 Laravel 定时任务。通过指定环境运行它们,以实现最大的灵活性。

$schedule->command('reports:send')
    ->daily()
    ->environments(['production', 'staging']);

维护模式

如果您想在你的网站上启用维护模式,请执行下面的 Artisan 命令:

php artisan down

然后,用户将看到默认的 503 状态页面。

在 Laravel 8 中,您还可以提供一些选项:

  • 用户应被重定向到的路径
  • 应该预渲染的视图
  • 绕过维护模式的秘密短语
  • 每 X 秒重试页面加载
php artisan down --redirect="/" --render="errors::503" --secret="1630542a-246b-4b66-afa1-dd72a4c43515" --retry=60

在 Laravel 8 之前,您可以提供以下选项:

  • 要显示的消息
  • 每 X 秒重试页面加载
  • 仍然允许某个 IP 地址访问
php artisan down --message="Upgrading Database" --retry=60 --allow=127.0.0.1

当您完成维护工作时,只需运行:

php artisan up

Artisan 命令行帮助

要查看 Artisan 命令的选项,可以在运行命令时使用 --help 标志。例如,运行 php artisan make:model --help 并查看您有多少选项:

Options:
  -a, --all             为模型生成迁移、seeder、factory、policy、resource 控制器和表单请求类
  -c, --controller      为模型创建一个新的控制器
  -f, --factory         为模型创建一个新的工厂
      --force           如果模型已经存在,也要创建该类
  -m, --migration       为模型创建一个新的迁移文件
      --morph-pivot     指示生成的模型是否应该是自定义的多态中间表模型
      --policy          为模型创建一个新的策略
  -s, --seed            为模型创建一个新的 seeder
  -p, --pivot           指示生成的模型是否应该是自定义的中间表模型
  -r, --resource        指示生成的控制器是否应该是资源控制器
      --api             指示生成的控制器是否应该是 API 资源控制器
  -R, --requests        为模型创建新的表单请求类并在资源控制器中使用它们
      --test            为模型生成一个相应的 PHPUnit 测试
      --pest            为模型生成一个相应的 Pest 测试
  -h, --help            显示给定命令的帮助信息。如果没有给定命令,则显示列表命令的帮助信息
  -q, --quiet           不输出任何消息
  -V, --version         显示此应用程序的版本
      --ansi|--no-ansi  强制(或禁用 --no-ansi)ANSI 输出
  -n, --no-interaction  不要询问任何交互式问题
      --env[=ENV]       命令应在其中运行的环境
  -v|vv|vvv, --verbose  增加消息的详细程度:1 为正常输出,2 为更详细的输出,3 为调试

确认 Laravel 版本

通过以下命令行,可以查看并确认你的应用所使用 Lavavel 版本 php artisan --version

从任意地方启动 Artisan 命令

如果你有一个Artisan命令,你不仅可以从终端启动它,还可以从代码中的任何地方使用参数启动它。使用 Artisan::call()方法:

Route::get('/foo', function () {
    $exitCode = Artisan::call('email:send', [
        'user' => 1, '--queue' => 'default'
    ]);

    //
});

隐藏自定义命令

如果您不希望在 Artisan 命令列表中显示特定的命令,可以将 hidden 属性设置为 true

class SendMail extends Command
{
    protected $signature = 'send:mail';
    protected $hidden = true;
}

如果您运行 php artisan,则在可用命令列表中将不会看到 send:mail

通过将 hidden 属性设置为 true,您可以在不显示该命令的情况下仍然能够使用它。

跳转方法

在 Laravel 的调度器中,您可以使用 skip 方法来跳过某个命令的执行。

$schedule->command('emails:send')->daily()->skip(function () {
    return Calendar::isHoliday();
});
请登录后再评论