我有一个CustomCommand_1
和一个CustomCommand_2
。
在CustomCommand_2
执行后立即创建命令管道并执行CustomCommand_1
的任何方法? (不在另一个内部调用命令)。
答案 0 :(得分:1)
使用when()或skip()时,您可以使用回调来确定何时会运行或不运行:
$schedule
->call('Mailer@BusinessDayMailer')
->weekdays()
->skip(function(TypeHintedDeciderClass $decider)
{
return $decider->isHoliday();
}
);
简称:Event Scheduling和Commands & Handlers
您还可以阅读如何在队列here中添加命令。 如果有帮助的话,请参阅。
答案 1 :(得分:0)
我找不到任何办法,所以我找到了解决办法(在laravel sync
驱动程序上测试过)。
首先,您必须创建/调整基本命令:
namespace App\Commands;
use Illuminate\Foundation\Bus\DispatchesCommands;
abstract class Command {
use DispatchesCommands;
/**
* @var Command[]
*/
protected $commands = [];
/**
* @param Command|Command[] $command
*/
public function addNextCommand($command) {
if (is_array($command)) {
foreach ($command as $item) {
$this->commands[] = $item;
}
} else {
$this->commands[] = $command;
}
}
public function handlingCommandFinished() {
if (!$this->commands)
return;
$command = array_shift($this->commands);
$command->addNextCommand($this->commands);
$this->dispatch($command);
}
}
每个命令在执行完毕后都必须调用$this->handlingCommandFinished();
。
有了这个,你可以链接你的命令:
$command = new FirstCommand();
$command->addNextCommand(new SecondCommand());
$command->addNextCommand(new ThirdCommand());
$this->dispatch($command);
<强>管道强>
不是在每个命令中调用handlingCommandFinished
,而是使用命令管道!
在App\Providers\BusServiceProvider::boot
添加:
$dispatcher->pipeThrough([
'App\Commands\Pipeline\ChainCommands'
]);
添加创建App\Commands\Pipeline\ChainCommands
:
class ChainCommands {
public function handle(Command $command, $next) {
$result = $next($command);
$command->handlingCommandFinished();
return $result;
}
}
答案 2 :(得分:0)
是什么阻止你做以下事情?
pat = re.compile(r'[^]{2}')