MDL-82747 core: Provide a standard way to register the Autoloader

This commit is contained in:
Andrew Nicols 2024-08-08 12:57:34 +08:00
parent cc2edf3b8c
commit 2243d1b395
No known key found for this signature in database
GPG Key ID: 6D1E3157C8CFBF14
5 changed files with 26 additions and 21 deletions

View File

@ -177,6 +177,7 @@ $CFG->admin = array_pop($parts);
ini_set('include_path', $CFG->libdir.'/pear' . PATH_SEPARATOR . ini_get('include_path'));
require_once($CFG->libdir.'/classes/component.php');
require_once($CFG->libdir.'/classes/text.php');
require_once($CFG->libdir.'/classes/string_manager.php');
require_once($CFG->libdir.'/classes/string_manager_install.php');
@ -192,13 +193,8 @@ require_once($CFG->libdir.'/adminlib.php');
require_once($CFG->libdir.'/componentlib.class.php');
require_once($CFG->dirroot.'/cache/lib.php');
// Register our classloader, in theory somebody might want to replace it to load other hacked core classes.
// Required because the database checks below lead to session interaction which is going to lead us to requiring autoloaded classes.
if (defined('COMPONENT_CLASSLOADER')) {
spl_autoload_register(COMPONENT_CLASSLOADER);
} else {
spl_autoload_register('core_component::classloader');
}
// Register our classloader.
\core_component::register_autoloader();
require($CFG->dirroot.'/version.php');
$CFG->target_release = $release;

View File

@ -218,13 +218,9 @@ require_once($CFG->dirroot.'/cache/lib.php');
//the problem is that we need specific version of quickforms and hacked excel files :-(
ini_set('include_path', $CFG->libdir.'/pear' . PATH_SEPARATOR . ini_get('include_path'));
// Register our classloader, in theory somebody might want to replace it to load other hacked core classes.
// Required because the database checks below lead to session interaction which is going to lead us to requiring autoloaded classes.
if (defined('COMPONENT_CLASSLOADER')) {
spl_autoload_register(COMPONENT_CLASSLOADER);
} else {
spl_autoload_register('core_component::classloader');
}
// Register our classloader.
\core_component::register_autoloader();
require('version.php');
$CFG->target_release = $release;
@ -653,4 +649,3 @@ echo '</div>';
install_print_footer($config);
die;

View File

@ -129,6 +129,17 @@ class core_component {
'Invoker' => 'lib/php-di/invoker/src',
];
/**
* Register the Moodle class autoloader.
*/
public static function register_autoloader(): void {
if (defined('COMPONENT_CLASSLOADER')) {
spl_autoload_register(COMPONENT_CLASSLOADER);
} else {
spl_autoload_register([self::class, 'classloader']);
}
}
/**
* Class loader for Frankenstyle named classes in standard locations.
* Frankenstyle namespaces are supported.

View File

@ -620,12 +620,8 @@ if (!empty($_SERVER['HTTP_X_moz']) && $_SERVER['HTTP_X_moz'] === 'prefetch'){
//the problem is that we need specific version of quickforms and hacked excel files :-(
ini_set('include_path', $CFG->libdir.'/pear' . PATH_SEPARATOR . ini_get('include_path'));
// Register our classloader, in theory somebody might want to replace it to load other hacked core classes.
if (defined('COMPONENT_CLASSLOADER')) {
spl_autoload_register(COMPONENT_CLASSLOADER);
} else {
spl_autoload_register('core_component::classloader');
}
// Register our classloader.
\core_component::register_autoloader();
// Remember the default PHP timezone, we will need it later.
core_date::store_default_php_timezone();

View File

@ -1,6 +1,13 @@
This files describes API changes in core libraries and APIs,
information provided here is intended especially for developers.
=== 4.4.3 ===
* The Moodle autoloader should now be registered using `\core\component::register_autoloader` rather
than manually doing so in any exceptional location which requires it. It is not normally necessary
to include the autoloader manually, as it is registered automatically when the Moodle environment
is bootstrapped.
=== 4.4.2 ===
* The `\core\dataformat::get_format_instance` method is now public, and can be used to retrieve a writer instance for