You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
New exception and helper methods to help control the dispatch flow
New abort() method to allow stopping the routing process and returning a response code
Routes are now instances of a new Route class, instead of just being a set of meta properties and a callback
Routes are now stored in a RouteCollection class, which extends the DataCollection class
New keys() and clear() methods for the DataCollection class
Added the capability of reverse routing!
Now allowing for route callbacks to change the response object by returning a new ApiResponse instance
New "slug" type for route param matching
New isEmpty() and cloneEmpty() methods for the DataCollection class
The $matched route callback parameter is now an instance of a RouteCollection, instead of just an integer
Route callbacks are now passed the Klein instance for easier closure/class-scope use
Regular expression routing is now more accurate and will match more special characters in a similar way to Sinatra
Routes are now built with a dependency injected AbstractRouteFactory instance, allowing the building of routes to be customized more easily
New options() and head() alias methods for matching OPTIONS and HEAD requests respectively
The Response class has been abstracted into an AbstractResponse and a separate Response class for cleaner 3rd-party extension
New "after dispatch" callbacks can be registered for firing a series of callbacks after the dispatch loop has completed
New patch() alias method for matching PATCH requests
New HTTP error handling via exceptions and callback registration for a more direct (and less magical) API for controlling HTTP errors
The escape() method in the ServiceProvider class now allows for the passing of entity escaping flags
Route regular expressions are now validated and provide helpful errors upon a validation failure
Routes can now contain an empty string path
The composer autoloader is now compatible with the PSR-4 standard.
Regular expression compilation performance has been improved
100% Code Coverage
Bug fixes
The README document has been updated to fix a few typos and inconsistencies
Route params are now properly URL decoded
404/405 routes now properly set the appropriate status code automatically
Silencing the locked response exceptions as the behavior is designed to be transparent/automatic
Allow route callables to be an array suitable for call_user_func() callable behavior
More proper handling for 404's that also call the 404 error handlers
The file() and json() methods in the Response class no longer override system-configured time processing limits
Now checking if the output buffer is open before attempting to close it
The methods matched counter ($methods_matched) is now much more accurate, not counting methods that shouldn't have been considered matches
Various PHPdoc inaccuracies and inconsistencies have been fixed
Regular expressions are now quoted during compilation in a much safer manner
The PHPdoc tags have been updated to use the more modern syntax
Upgrading
Deprecations
Handling 404 and 405 errors with a specially registered route callback is now deprecated. It's now suggested to use Klein's new onHttpError() method instead.
Autoloading the library with Composer no longer utilizes the PSR-0 spec. The composer autoloader now uses PSR-4.
Interface Changes
Some of the route callback params have changed. This will effect any route definitions with callbacks using the more advanced parameters.
The old params were (in order):
Request $request
Response $response
Service $service
App $app
int $matched
array $methods_matched
The new params are (in order):
Request $request
Response $response
Service $service
App $app
Klein $klein
RouteCollection $matched
array $methods_matched
Non-match routes (routes that are wildcard and shouldn't consider as "matches") will no longer be considered as part of the "methods matched" array, since they aren't supposed to be matches in the first place
This may have implications for users that have created "match-all" OPTIONS method routes, as the OPTIONS method will no longer be considered a match.
If you'd like to conserve the old match behavior, you can simply mark the route as one that should be counted as a match with $route->setCountMatch(true)