Gestión de rutas según PHP

Este post surge de la necesidad de resolver una «pantalla blanca de la muerte» que me apareció con Drupal. Cuando pude ver de dónde venía el error, y tras días, sí, días de consultas descubrí que el problema no era yo, eras tú, pedazo de… perdón, me he desviado del tema y me vino a la cabeza un recuerdo negativo del pasado. ¡Qué jodida es la traición y la mentira, eh! jeje.

El problema que pude observar de lo «vomitado» por Drupal era lo siguiente:

TypeError: Argument 2 passed to Symfony\Component\Routing\RouteCollection::add() must be an instance of Symfony\Component\Routing\Route, bool given, called in \core\lib\Drupal\Core\Routing\RouteProvider.php on line 380 in \vendor\symfony\routing\RouteCollection.php

Pues bien, si te ocurre lo mismo que a mí, no te preocupes, el problema es que estás usando una versión de PHP 7.3, en la versión 7.4 se ha solucionado.

Todo radica en la manera en que se instancia las rutas en una u otra versión. En 7.3 se pasan instancias; en 7.4, se serializa y se des serializa. La solución es si te resulta complicado hacer un upgrade, que sería lo recomendable, es aplicar el siguiente parche.

Debes editar el fichero \core\lib\Drupal\Core\Routing\Router.php y realizar el siguiente cambio:

/**
 {@inheritdoc}
 */
 public function matchRequest(Request $request) {
// Quitamos o comentamos lo siguiente
//    $collection = $this->getInitialRouteCollection($request); 

// Añadimos todo este bloque
// +++++++++++++++++++++++++
 try {
   $collection = $this->getInitialRouteCollection($request);
 }
 // PHP serialization has changed between 7.3 and 7.4. Causing errors.
 catch (\TypeError $e) {
   \Drupal::service('router.builder')->rebuild();
   $collection = $this->getInitialRouteCollection($request);
 }
// +++++++++++++++++++++++++

 if ($collection->count() === 0) {

Una vez que se haya aplicado el parche anterior, ojo, solo si no has migrado del PHP 7.3 al 7.4; ya tendrás todo operativo nuevamente.

4 respuestas a «Gestión de rutas según PHP»

  1. Creo que este error te pude dar por temas de Caché y aqui te comparto una de las formas de solucionarlo:

    Usando el script de reconstrucción
    1. Abra settings.php (/sites/default/settings.php) en cualquier editor de texto sin formato. Agregue esta línea al final del archivo y guárdelo:
    $ configuraciones [‘rebuild_access’] = TRUE;
    2. Visite http://www.example.com/core/rebuild.php en su navegador (donde http://www.example.com es la URL de su sitio). Después de una breve pausa, debería ser redirigido a la página de inicio de su sitio y la caché debería reconstruirse.
    3. Abra settings.php (/sites/default/settings.php) en un editor de texto. Busque la línea que agregó con $ settings [rebuild_access], elimine esta línea y guarde el archivo.

    otra forma sería vaciar Caché desde la Base de Datos.

    Espero sea de utilidad.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.