Extensions - Setup <classloader>
during installation
#20091
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Overview
Extensions may define
<classloader>
rules, such as:Any classloaders should take effect promptly during installation, to allow code like this:
For a more complete example, see: https://gist.github.com/totten/02e6e15c8a50aaca929b2206f2492de4
This is an extract from #20090.
Before
Classloaders are not available during installation.
The example doesn't work -- because
hook_civicrm_install
fires before./Civi
has been added to the classloader.After
The classloader is updated before running install logic.
The example works:
Technical Details
In theory,
CRM_Extension_ClassLoader
has a property$this->loader
which (purported to) track the real/live loader. We need access to$this->loader
to register extra classloading rules. Alas,$this->loader
wasnull
. So the patch fixes that.