drupal 9: incompatibilità downgrade da php74 a php73
Mi è capitato un serio problema di incompatibilità fra versioni di php aggiornando il sito drupal dalla versione 7 alla 9.1.x
Credo di aver risolto, perciò condivido, in caso qualcuno avesse la mia stessa idea.
Prologo:
copio il l'intero sito drupal7 ed il suo db in locale (Mysql 8, php7.3)
installo la copia in locale, MA con Mysql 10 e php 7.4
aggiorno in locale il sito a drupal 9.1.x
Cancello i moduli non aggiornabili, cambio tema con uno compatibile e lo aggiusto secondo le mie esigenze. Verifico che tutto funzioni. metto il sito in manutenzione, pulisco la cache.
Su altervista cancello il vecchio sito, carico quello nuovo in formato zip (per qualche motivo, via FTP pare aver saltato qualche file), importo il dump del nuovo db, cancellando contemporaneamente il vecchio.
Setto Rewrite in .htaccess su "/"
modifico i 2 file MTimeProtectedFastFileStorage.php e SessionConfiguration.php secondo quanto indicato in altre thread.
A questo punto col browser vado sull'url del mio sito ed ottengo un bell'errore del tipo: "The website is currently unavailable, try later" o qualcosa del genere, ovvero il famigerato errore 500 di Apache.
Edito settings.php in sites/default/ aggiungendo la seguente riga per avere i dettagli dell'errore:
Ricarico la HP e visualizzo il terrificante: The website encountered an unexpected error. Please try again later.
TypeError: Argument 2 passed to Symfony\Component\Routing\RouteCollection::add() must be an instance of Symfony\Component\Routing\Route, bool given, called in /membri/kinmen/core/lib/Drupal/Core/Routing/RouteProvider.php on line 380 in Symfony\Component\Routing\RouteCollection->add() (line 74 of vendor/symfony/routing/RouteCollection.php).
Ho seriamente pensato al suicidio... Poi dopo varie ricerche ho scoperto che era dovuto all'incompatibilità di un componente di drupal 9, installando quest'ultimo su php7.4 e poi spostandolo su php7.3 (in realtà ciò si verifica anche in altri casi simili, aggiornamenti). Il problema è in Router.php. Sul sito di drupal hanno forito una patch. Il file intero corretto, che ho sostituito sul mio sito, si trova qui: