PHP-DI / Slim-Bridge

PHP-DI integration with the Slim framework
http://php-di.org/doc/frameworks/slim.html
MIT License
176 stars 38 forks source link

Improve ease of extention #89

Open andrewnicols opened 4 months ago

andrewnicols commented 4 months ago

In our usage we need to extend the ControllerInvoker to have responses normalised from a generic Payload into a standard Response.

To make this easier it would be helpful if some private methods were instead protected and the Invoker fetching the default resolver chain were separated out from the creation of the ControllerInvoker.

Fixes #105

You can see our proposed implementation of the ControllerInvoker here. With the proposed patch here, that would be vastly simplified and easier to maintain, something like:

    #[\Override]
    protected function processResponse($response) {
        return \core\di::get(response_handler::class)->standardise_response($response);
    } 

Likewise our custom Bridge implementation would be vastly simplified by breaking apart the Bridge::createControllerInvoker method from this, to:

class bridge extends \DI\Bridge\Slim\Bridge {
    #[\Override]
    protected static function createControllerInvoker(ContainerInterface $container): ControllerInvoker {
        return new controller_invoker(self::createInvoker($container));
    }
}
mnapoli commented 4 months ago

Thanks for both PRs!

My goal with this bridge is to provide an opinionated default for Slim so that users can get started immediately.

The bridge itself is extremely simple. If you have advanced needs, I think it makes much more sense to copy the classes and edit them, they're super easy to understand.

However if we want to change the defaults I'm all ears, but https://github.com/PHP-DI/Slim-Bridge/issues/86#issuecomment-1850477714 tells me that the bridge is currently aligned with how Slim works, so I'm not sure we want to change them.