A handler that returns void is the pure form, and the controller behind it needs the identifier of the thing it just created.
// the pure version, and the workaround it forces
$id = Uuid::v7(); // generated by the CALLER
$this->bus->dispatch(new PlaceOrder($id, $lines));
return new JsonResponse(['id' => $id], 201);
// the pragmatic version
$id = $this->bus->dispatch(new PlaceOrder($lines)); // returns
// which makes the bus synchronous by definition.
Generating the identifier at the call site is the answer that keeps the handler void and keeps the bus free to be asynchronous later, and it costs a little strangeness — the caller invents the id of a thing that does not exist yet. That is fine for a UUID and impossible for a database sequence, which is the real constraint behind this decision and the reason the choice of key type is an architectural one.