Withe respect to configuring via the constructor:
PHP Code:
    public function __construct($manager$formType$redirect$template) {
        
$this->manager $manager;
        
$this->formType $formType;
        
$this->redirect $redirect;
        
$this->template $template
I fully understand the flexibility that such an approach offers. And in fact I use this in the cases where I need to.

The biggest objection I have to always doing this is that it means I basically need ControllerAction classes instead of Controller classes. That's because I'll typically have multiple actions (edit,create,show,list etc) inside of one Controller class. To make the class configurable means adding a bunch more arguments to the constructor (different set for each method) which in turn makes the class very fragile.

I have gone down the ControllerAction class before (and on occasion still use it when needed) but all it seems to do for me is to multiply the number of classes without providing much practical benefit.

I'm not a big fan of adding support for flexibility when I don't need it. Looking over my code for the last 12 years or so reveals very few cases where I have to copy/paste code just to make a slight tweak. I simply don't need to change the template or change the form or change the manager.