Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Router rewrite for PSR-7 #6

Closed
weierophinney opened this issue Dec 31, 2019 · 2 comments
Closed

Router rewrite for PSR-7 #6

weierophinney opened this issue Dec 31, 2019 · 2 comments

Comments

@weierophinney
Copy link
Member

Work in progress

Goal of the rewrite is to switch component to the native support of PSR-7.

Console routing and http request routing are too different. Common interface proved to be limiting and of little practical value: routes were not shared between the two and consumers had to accept one and outright reject another in most cases.
Next implementation of zend-mvc will be PSR-7 based as well and zend-mvc-console will be dropped.

For that reason, support for Zend\Http\RequestInterface will be dropped as too incompatible with PSR-7 and support for the non-http routing with Zend\Stdlib\RequestInterface will not be retained as impractical.
Effectively that will make zend-router a PSR-7 only router.

Also, this PR bumps minimum php to 7.1, introduces strict types, scalar and return typehinting

Note: this PR is a subject for rebases and commit squashes. Ask before using as a basis for your work.


Originally posted by @Xerkus at zendframework/zend-router#40

@weierophinney
Copy link
Member Author

Small note:
I wanted to keep RouteMatch as a separate thing from RouteResult to keep it more or less backward compatible.
It is used extensively in zend-mvc, but consumers should really be using PSR-7 request attributes for matched parameters. While it will cause additional migration challenges for zend-mvc users, it will be more in line with zend-expressive and the rest of the industry.
Besides, attempts to keep RouteMatch and request attributes in sync are error prone and pretty much guaranteed to produce subtle bugs.


Originally posted by @Xerkus at zendframework/zend-router#40 (comment)

@weierophinney
Copy link
Member Author

Routes doing partial match conditionally and depending on the concrete implementation are violating RouteInterface contract.
To make things more straightforward, RouteInterface is now not allowed to return partial match. PartialRouteInterface extending RouteInterface was introduced instead.
Chain, Hostname, Literal, Method, Regex, Scheme and Segment are now partial routes.
Chain was changed to accept partial routes only, Part was changed to accept only partial route for its base route.


Originally posted by @Xerkus at zendframework/zend-router#40 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants