Problem/Motivation
In order to use database versioning via liquibase, we are using custom autoload and namespace that we have defined in the settings.php
Example :
$databases['default']['default'] = array (
...
'namespace' => 'Drupal\CUSTOM_MODULE_NAME\Driver\Database\pgsql',
'autoload' => "modules/custom/CUSTOM_MODULE_NAME/src/Driver/Database/pgsql/",
'driver' => 'pgsql',
...
);
The site was working fine in 9.3.16 but after updating to 9.4.1 we have a namespace error.
It says :
Error: Class 'Drupal\pgsql\Driver\Database\pgsql\Connection' not found in include() (line 17 of \web\modules\custom\CUSTOM_MODULE_NAME\src\Driver\Database\pgsql\Connection.php).
include() (Line: 571)
Composer\Autoload\includeFile('modules/custom/CUSTOM_MODULE_NAME/src/Driver/Database/pgsql/\Connection.php') (Line: 428)
Composer\Autoload\ClassLoader->loadClass('Drupal\CUSTOM_MODULE_NAME\Driver\Database\pgsql\Connection')
spl_autoload_call('Drupal\CUSTOM_MODULE_NAME\Driver\Database\pgsql\Connection') (Line: 432)
Drupal\Core\Database\Database::openConnection('default', 'default') (Line: 189)
Drupal\Core\Database\Database::getConnection('default')
call_user_func_array('Drupal\Core\Database\Database::getConnection', Array) (Line: 79)
Drupal\Component\DependencyInjection\PhpArrayContainer->createService(Array, 'database') (Line: 176)
Drupal\Component\DependencyInjection\Container->get('database', 1) (Line: 212)
Drupal\Component\DependencyInjection\PhpArrayContainer->resolveServicesAndParameters(Array) (Line: 62)
Drupal\Component\DependencyInjection\PhpArrayContainer->createService(Array, 'cache.container') (Line: 176)
Drupal\Component\DependencyInjection\Container->get('cache.container') (Line: 550)
Drupal\Core\DrupalKernel->getCachedContainerDefinition() (Line: 895)
Drupal\Core\DrupalKernel->initializeContainer() (Line: 472)
Drupal\Core\DrupalKernel->boot() (Line: 708)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
We have tried every patch relating to database driver's location change but nothing works (https://www.drupal.org/project/drupal/issues/3129043).
The only thing that work for us is if we put an include_once in CUSTOM_MODULE_NAME/src/Driver/Database/pgsql/Connection.php, just above the use statement
e.g
namespace Drupal\CUSTOM_MODULE_NAME\Driver\Database\pgsql;
include_once dirname(__DIR__, 8) . '/web/core/modules/pgsql/src/Driver/Database/pgsql/Connection.php';
use Drupal\pgsql\Driver\Database\pgsql\Connection as BaseConnection;
Does anyone have any idea or solution?
Thanks in advance