mercredi 9 décembre 2015

Commands return data

I'm trying to clean up some of my controllers by moving the functionality from the controller methods to reusable commands that I can just pass on to a command bus. As I've understood, though, a command is not supposed to return data (or did I misunderstand something?). But how else would you suggest for the controller to act on the outcome of the command?

For instance I have a Create endpoint in my ClientController. The controller method dispatches a CreateClient command, and then I'd like to redirect the user to the new Client's edit page. Something like

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);
    }
}

If the creation failed I can throw an exception, which can be handled by the controller. I could of course create a method in my ClientRepository to get the newest created Client, but that seems error prone. But how would you suggest that I got a hold of the newly created client?

Aucun commentaire:

Enregistrer un commentaire