There's no "best" way. It all depends on the size and scope of your project.
One idea would be to create a "Service" class that is responsible for handling your business logic so that your controllers are nothing more than traffic cops.
For example: In my project I created a "Services" directory inside of the app directory. Then inside of that, I have an "Accounts" directory. When an account is being created, the AccountController calls the AccountCreator class and passes the input over to it. The AccountCreator is responsible for doing the work of creating an account and returning errors (if any) back to the controller which then either redirects with a success message or the errors.