我试图通过将控制器方法中的功能移动到可重复使用的命令来清理我的一些控制器,我可以将其传递给命令总线。但是,据我所知,命令不应该返回数据(或者我误解了什么?)。但是你怎么建议控制器根据命令的结果采取行动呢?
例如,我的ClientController中有一个Create端点。控制器方法调度CreateClient命令,然后我想将用户重定向到新客户的编辑页面。像
这样的东西class ClientController extends Controller
{
public function create($request)
{
try {
$this->dispatch(new CreateClient(/*get something from the request to pass*/));
} catch (\Exception $e) {
return $this->json(['error' => $e->getMessage()]);
}
$client = ...;
$this->redirect('/client/' . $client->id);
}
}
如果创建失败,我可以抛出异常,可以由控制器处理。我当然可以在我的ClientRepository中创建一个方法来获取最新创建的Client,但这似乎容易出错。但是你怎么建议我抓住新创建的客户?
修改
在https://www.youtube.com/watch?v=fbSYZFZCFS0结束时,他们讨论了这个实际问题。他们的主要建议是使用UUID,因此ID可以由控制器生成,也可以使用异步方法轮询新项目。
他们还提到了使用事件监听器的可能性,但认为它是PHP中的反模式。
我还没有决定如何选择这样做。