Laravel 10里新引入了一个Process门面,或者说服务,能让我们更好地管理脚本运行。比如下面的例子:
use Illuminate\Support\Facades\Process;
$result = Process::run('ls -la');
$result->successful();
$result->failed();
$result->exitCode();
$result->output();
$result->errorOutput();
$result->throw();
$result->throwIf($condition);
甚至也可以同时执行多条脚本命令:
use Illuminate\Process\Pool;
use Illuminate\Support\Facades\Pool;
[$first, $second, $third] = Process::concurrently(function (Pool $pool) {
$pool->command('cat first.txt');
$pool->command('cat second.txt');
$pool->command('cat third.txt');
});
return $first->output();
而且呢,它也提供了便利的测试方法,比如:
Process::fake([
'ls *' => Process::result('Hello World'),
]);
$result = Process::run('ls -la');
Process::assertRan(function ($process, $result) {
return $process->command == 'ls -la';
});
Process::assertRanTimes(function ($process, $result) {
return $process->command == 'ls -la';
}, times: 1);
Process::assertNotRan(function ($process, $result) {
return $process->command == 'cat foo';
});
之前呢,我们要执行类似的脚本,往往得使用symfony的Process组件,现在laravel里也有类似的东东了,而且更加便利。
该篇是我们《Laravel 9 & 10 优雅实战入门(第三版)》这一课程的扩展文章,该课程历时6年,历经三版,是咱们国内最优雅、最正宗的laravel入门兼实战课程。
感兴趣的同学可以到我们的课程公开群做客咨询:109256050(公开课@pilishen.com)