Issue #3145563 by Charlie ChX Negyesi, NigelCunningham, alexpott, joachim, longwave, catch, tyler36: Route serialization incompatibilities between PHP 7.4 and 7.3 (9.x only)

(cherry picked from commit 84a6dadd95)
merge-requests/674/head
catch 2021-05-10 22:22:48 +01:00
parent d3d41a4798
commit a641739d27
1 changed files with 13 additions and 1 deletions

View File

@ -107,7 +107,19 @@ class Router extends UrlMatcher implements RequestMatcherInterface, RouterInterf
* {@inheritdoc}
*/
public function matchRequest(Request $request) {
$collection = $this->getInitialRouteCollection($request);
try {
$collection = $this->getInitialRouteCollection($request);
}
// PHP 7.4 introduces changes to its serialization format, which mean that
// older versions of PHP are unable to unserialize data that is serialized
// in PHP 7.4. If the site's version of PHP has been downgraded, then
// attempting to unserialize routes from the database will fail, and so the
// router needs to be rebuilt on the current PHP version.
// See https://www.php.net/manual/en/migration74.incompatible.php.
catch (\TypeError $e) {
\Drupal::service('router.builder')->rebuild();
$collection = $this->getInitialRouteCollection($request);
}
if ($collection->count() === 0) {
throw new ResourceNotFoundException(sprintf('No routes found for "%s".', $this->currentPath->getPath()));
}