🚀 Sixth release candidate.
🚀 This release contains backwards compatibility breaks with previous release candidates. All previous functionality should continue to work, but will 👉 emit
E_USER_DEPRECATEDnotices prompting you to update your application. In particular:
- The routing middleware has been split into two separate middleware implementations, one for routing, another for dispatching. This eliminates the need for the route result observer system, as middleware can now be placed between routing and dispatching — an approach that provides for greater flexibility with regards to providing route-based functionality.
- As a result of the above,
Zend\Expressive\Applicationno longer implements
Zend\Expressive\Router\RouteResultSubjectInterface, though it retains the methods associated (each emits a deprecation notice).
- 🔧 Configuration for
Zend\Expressive\Container\ApplicationFactorywas modified to implement the
middleware_pipelineas a single queue, instead of segregating it between
post_routing. Each item in the queue follows the original middleware specification from those keys, with one addition: a
prioritykey can be used to allow you to granularly shape the execution order of the middleware pipeline.
A migration guide was written to help developers migrate to RC6 from earlier versions.
- #255 adds
documentation for the base path functionality provided by the
UrlHelperclass of zend-expressive-helpers.
- #227 adds a section on creating localized routes, and setting the application locale based on the matched route.
- #244 adds
a recipe on using middleware to detect localized URIs (vs using a routing
parameter), setting the application locale based on the match detected,
and setting the
UrlHelperbase path with the same match.
- #260 adds a recipe on how to add debug toolbars to your Expressive applications.
- #261 adds a flow/architectural diagram to the "features" chapter.
- #262 adds a recipe demonstrating creating classes that can intercept multiple routes.
- #270 adds
new methods to
dispatchMiddleware()is new middleware for dispatching the middleware matched by routing (this functionality was split from
routeResultObserverMiddleware()is new middleware for notifying route result observers, and exists only to aid migration functionality; it is marked deprecated!
pipeDispatchMiddleware()will pipe the dispatch middleware to the
pipeRouteResultObserverMiddleware()will pipe the route result observer middleware to the
routeResultObserverMiddleware(), the method only exists for aiding migration, and is marked deprecated.
- #270 adds
Zend\Expressive\MarshalMiddlewareTrait, which is composed by
Zend\Expressive\Application; it provides methods for marshaling middleware based on service names or arrays of services.
- 🗄 #270 deprecates
the following methods in
Zend\Expressive\Application, all of which will be removed in version 1.1:
- 🚚 #270 removes the
- #270 eliminates
post_routingterminology from the
middleware_pipeline, in favor of individually specified
priorityvalues in middleware specifications.
- #263 typo fixes in documentation
🚀 Fifth release candidate.
- #233 adds a documentation page detailing projects using and tutorials written on Expressive.
- #238 adds a cookbook recipe detailing how to handle serving an Expressive application from a subdirectory of your web root.
- #239 adds a cookbook recipe detailing how to create modular Expressive applications.
- #243 adds a
chapter to the helpers section detailing the new
- 🛠 #234 fixes the
inheritance tree for
Zend\Expressive\Exception\RuntimeExceptionto inherit from
- ⚡️ #237 updates the
Pimple documentation to recommend
mouf/pimple-interop, as the latter consumed Pimple v1, instead of the current stable v3.
🚀 Fourth release candidate.
- #217 adds a cookbook entry to the documentation detailing how to configure zend-view helpers from other components, as well as how to add custom view helpers.
- ⚡️ #219 updates the
"Hello World Using a Configuration-Driven Container" usage case to use
Glob::glob()instead of the
glob()native function, to ensure the documented solution is portable across platforms.
- ⚡️ #223 updates the
documentation to refer to the
composer servecommand where relevant, and also details how to create the command for standalone users.
- #221 splits the various cookbook entries into separate files, so each is self-contained.
- #224 adds opening
<?phptags to two configuration file examples, in order to prevent copy-paste errors.
🚀 Third release candidate.
- #185 Support casting zend-view models to arrays.
- 👍 #192 adds support for specifying arrays of middleware both when routing and when creating pipeline middleware. This feature is opt-in and backwards compatible; simply specify an array value that does not resolve as a callable. Values in the array must be callables, service names resolving to callable middleware, or fully qualified class names that can be instantiated without arguments, and which result in invokable middleware.
functionality for observing computed
Zend\Expressive\Router\RouteResultSubjectInterface, which allows attaching
Zend\Expressive\RouteResultObserverInterfaceimplementations and notifying them of computed
RouteResultinstances. The following methods are now available on the
Applicationcalls this internally within
routeMiddleware. This feature enables the ability to notify objects of the calculated
RouteResultwithout needing to inject middleware into the system.
- #81 adds a cookbook entry for creating 404 handlers.
- #210 adds a documentation section on the new zendframework/zend-expressive-helpers utilities.
- 🚚 #204 removes the
Templatecomponents, as they are now shipped with the following packages, respectively:
- #187 Inject the route result as an attribute
- ⚡️ #197 updates the
Zend\Expressive\Container\ApplicationFactoryto raise exceptions in cases where received configuration is unusable, instead of silently ignoring it. This is a small backwards compatibility break, but is done to eliminate difficult to identify issues due to bad configuration.
- #202 clarifies
RouterInterfaceimplements MUST throw a
addRoute()is called after either
generateUri()have been called.
🚀 Second release candidate.
- ⚡️ Updated branch aliases: dev-master => 1.0-dev, dev-develop => 1.1-dev.
- Point dev dependencies on sub-components to
🚀 First release candidate.
- ⚡️ #160 updates
EmitterStackto throw a component-specific
InvalidArgumentExceptioninstead of the generic SPL version.
- #163 change the
documentation on wiring middleware factories to put them in the
routes.global.php; this keeps the routing and middleware configuration in the same file.
- ⚡️ #156 updates how
the routing middleware pulls middleware from the container; in order to work
with zend-servicemanager v3 and allow
has()queries to query abstract factories, a second, boolean argument is now passed.
- #131 modifies the
repository to remove the concrete router and template renderer
implementations, along with any related factories; these are now in their own
packages. The classes removed include: