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.
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.
Gracias por la aportación.
Este error me volvió a suceder e increiblemente me tope con este artículo y me di cuenta que la línea no la habia escrito bien..
lo que se debe agregar al final del archivo es:
$settings[‘rebuild_access’] = TRUE;
y corres tu dominio http://www.tudominio.com/core/rebuild.php
Gracias, espero que le sea de ayuda a mucha más personas.