Enable opt-out of URI scheme filtering #313
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR makes it possible to opt-out of URI scheme filtering. This may be used for generic scenarios where the schemes are not know and it is not desirable to limit them.
The filtering is opted out in the
Uri
class by inheriting it and overriding theUri::SUPPORTED_SCHEMES
constant, setting it tonull
:It is then possible to create URIs with any scheme:
To use the new class with
UriFactory
, one has to, again, inherit it, having two options:UriFactory::makeUriObject
methodUriFactory::URI_CLASS
or
Personally, I'm not happy with this inheritance-based approach, it seems to me that the filtering should be opt-in in and a function of the factory, not the Uri object. That would be breaking change. But even it the functionality was moved, the standard port omission would stop working in the Uri object.
I first tried using static variable, that could be manipulated globally, but that approach broke the existing inheritance due to restrictions in PHP.