Commit 9836e65b authored by catch's avatar catch
Browse files

Issue #3145563 by Charlie ChX Negyesi, NigelCunningham, alexpott, joachim,...

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 84a6dadd)
parent d39e25de
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -107,7 +107,19 @@ public function match($pathinfo) {
   * {@inheritdoc}
   */
  public function matchRequest(Request $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()));
    }