laminas / laminas-stratigility

PSR-7 middleware foundation for building and dispatching middleware pipelines
https://docs.laminas.dev/laminas-stratigility/
BSD 3-Clause "New" or "Revised" License
55 stars 12 forks source link

Add documentation describing using Next handler in middlewares #5

Closed weierophinney closed 1 year ago

weierophinney commented 4 years ago

Next handler in the pipeline passed as a second parameter to the middleware is not safe to invoke multiple times. What actually Next handler is is defined at runtime and is not guaranteed to be stateless, which can lead to undefined behavior.

For example, middleware designed to invoke Next handler second time will cause unintented side effects if Fail2Ban middleware is then registered next in the pipeline.

If handler needs to be invoked multiple times, it should be selected explicitly and injected as a direct dependency (directly or lazy way or as a proxy to a middleware pipe elsewhere, etc).


Originally posted by @Xerkus at https://github.com/zendframework/zend-stratigility/issues/187

weierophinney commented 1 year ago

Closing; this was an issue with the architecture prior to adopting PSR-17.