Artisan CLI
介绍
Artisan 是 Laravel 附带的命令行界面的名称。它提供了许多有用的命令供您在开发应用程序时使用。它由强大的 Symfony Console 组件驱动。
用法
列出所有可用命令
要查看所有可用的 Artisan 命令列表,您可以使用 list
命令:
php artisan list
查看命令的帮助屏幕
每个命令还包括一个“帮助”屏幕,显示并描述命令的可用参数和选项。要查看帮助屏幕,只需在命令名称前加上 help
:
php artisan help migrate
指定配置环境
您可以使用 --env
开关指定运行命令时应使用的配置环境:
php artisan migrate --env=local
显示当前 Laravel 版本
您还可以使用 --version
选项查看当前 Laravel 安装的版本:
php artisan --version
在 CLI 之外调用命令
有时您可能希望在 CLI 之外执行 Artisan 命令。例如,您可能希望从 HTTP 路由触发 Artisan 命令。只需使用 Artisan
facade:
Route::get('/foo', function()
{
$exitCode = Artisan::call('command:name', ['--option' => 'foo']);
//
});
您甚至可以将 Artisan 命令排队,以便由您的队列工作者在后台处理:
Route::get('/foo', function()
{
Artisan::queue('command:name', ['--option' => 'foo']);
//
});
调度 Artisan 命令
过去,开发人员为他们希望调度的每个控制台命令生成一个 Cron 条目。然而,这是一件麻烦事。您的控制台计划不再在源代码控制中,您必须 SSH 到服务器以添加 Cron 条目。让我们让生活更轻松。Laravel 命令调度器允许您在 Laravel 内部流畅且富有表现力地定义命令计划,并且您的服务器上只需要一个 Cron 条目。
您的命令计划存储在 app/Console/Kernel.php
文件中。在这个类中,您将看到一个 schedule
方法。为了帮助您入门,方法中包含了一个简单的示例。您可以自由地向 Schedule
对象添加任意数量的计划作业。您需要在服务器上添加的唯一 Cron 条目是:
* * * * * php /path/to/artisan schedule:run 1>> /dev/null 2>&1
这个 Cron 将每分钟调用 Laravel 命令调度器。然后,Laravel 评估您的计划作业并运行到期的作业。再简单不过了!
更多调度示例
让我们看看更多调度示例:
调度闭包
$schedule->call(function()
{
// 执行一些任务...
})->hourly();
调度终端命令
$schedule->exec('composer self-update')->daily();
手动 Cron 表达式
$schedule->command('foo')->cron('* * * * *');
频繁的作业
$schedule->command('foo')->everyFiveMinutes();
$schedule->command('foo')->everyTenMinutes();
$schedule->command('foo')->everyThirtyMinutes();
每日作业
$schedule->command('foo')->daily();
在特定时间(24 小时制)每日作业
$schedule->command('foo')->dailyAt('15:00');
每日两次作业
$schedule->command('foo')->twiceDaily();
每个工作日运行的作业
$schedule->command('foo')->weekdays();
每周作业
$schedule->command('foo')->weekly();
// 为特定的日子(0-6)和时间安排每周作业...
$schedule->command('foo')->weeklyOn(1, '8:00');
每月作业
$schedule->command('foo')->monthly();
在特定日子运行的作业
$schedule->command('foo')->mondays();
$schedule->command('foo')->tuesdays();
$schedule->command('foo')->wednesdays();
$schedule->command('foo')->thursdays();
$schedule->command('foo')->fridays();
$schedule->command('foo')->saturdays();
$schedule->command('foo')->sundays();
防止作业重叠
默认情况下,即使作业的上一个实例仍在运行,计划的作业也会运行。要防止这种情况,您可以使用 withoutOverlapping
方法:
$schedule->command('foo')->withoutOverlapping();
在此示例中,如果 foo
命令尚未运行,则每分钟运行一次。
限制作业应运行的环境
$schedule->command('foo')->monthly()->environments('production');
指示即使应用程序处于维护模式也应运行作业
$schedule->command('foo')->monthly()->evenInMaintenanceMode();
仅当回调为真时允许作业运行
$schedule->command('foo')->monthly()->when(function()
{
return true;
});
电子邮件发送计划作业的输出
$schedule->command('foo')->sendOutputTo($filePath)->emailOutputTo('foo@example.com');
您必须先将输出发送到文件,然后才能通过电子邮件发送。
将计划作业的输出发送到给定位置
$schedule->command('foo')->sendOutputTo($filePath);
作业运行后 Ping 给定 URL
$schedule->command('foo')->thenPing($url);
使用 thenPing($url)
功能需要 Guzzle HTTP 库。您可以通过在 composer.json
文件中添加以下行来将 Guzzle 5 添加到您的项目中:
"guzzlehttp/guzzle": "~5.0"