Run prettier on all *.md files

```
prettier '{app,source}/**/**.md' --write
```
This commit is contained in:
Oliver Davies 2020-03-08 17:52:59 +00:00
parent a3ceeaf0f3
commit 85a10c545b
170 changed files with 5127 additions and 2282 deletions

View file

@ -1,23 +1,32 @@
---
title: Simplifying Drupal Migrations with xautoload
date: 2016-05-03
excerpt: How to use the xautoload module to autoload migration classes within your Drupal 7 migration modules.
excerpt:
How to use the xautoload module to autoload migration classes within your
Drupal 7 migration modules.
tags:
- autoloading
- drupal
- drupal-planet
- drupal-7
- php
- autoloading
- drupal
- drupal-planet
- drupal-7
- php
---
How to use the [xautoload][1] module to autoload migration classes within your Drupal 7 migration modules.
How to use the [xautoload][1] module to autoload migration classes within your
Drupal 7 migration modules.
## What is xautoload?
[xautoload][1] is a Drupal module that enables the autoloading of PHP classes, in the same way that you would do so in a [Composer][2] based project such as Drupal 8 or Symfony.
[xautoload][1] is a Drupal module that enables the autoloading of PHP classes,
in the same way that you would do so in a [Composer][2] based project such as
Drupal 8 or Symfony.
It supports both the [PSR-0][3] and [PSR-4][4] standards, as well as providing a wildcard syntax for Drupals `file[]` syntax in .info files.
It supports both the [PSR-0][3] and [PSR-4][4] standards, as well as providing a
wildcard syntax for Drupals `file[]` syntax in .info files.
To use it, download and enable it from Drupal.org as you would for any other module, and then add it as a dependency within your module. The xautoload project page suggests including a minimum version in this format:
To use it, download and enable it from Drupal.org as you would for any other
module, and then add it as a dependency within your module. The xautoload
project page suggests including a minimum version in this format:
```language-ini
dependencies[] = xautoload (>= 7.x-5.0)
@ -43,17 +52,25 @@ files[] = includes/nodes/article.inc
files[] = includes/nodes/page.inc
```
In this example, each custom migration class is stored in its own file within the `includes` directory, and each class needs to be loaded separately using the `files[] = filename` syntax.
In this example, each custom migration class is stored in its own file within
the `includes` directory, and each class needs to be loaded separately using the
`files[] = filename` syntax.
One thing that the xautoload module does to enable for the use of wildcards within this syntax. By using wildcards, the module file can be simplified as follows:
One thing that the xautoload module does to enable for the use of wildcards
within this syntax. By using wildcards, the module file can be simplified as
follows:
```language-ini
files[] = includes/**/*.inc
```
This will load any .inc files within the `includes` directory as well as any sub-directories, like 'node' in the original example.
This will load any .inc files within the `includes` directory as well as any
sub-directories, like 'node' in the original example.
This means that any new migration classes that are added will be automatically loaded, so you dont need to declare each include separately within foo_migrate.info again. The great thing about this approach is that it works with the existing directory and file structure.
This means that any new migration classes that are added will be automatically
loaded, so you dont need to declare each include separately within
foo_migrate.info again. The great thing about this approach is that it works
with the existing directory and file structure.
### Use the PSR-4 structure
@ -62,11 +79,19 @@ If you want to use the [PSR-4][4] approach, you can do that too.
In order to do so, youll need to complete the following steps:
1. Rename the `includes` directory to `src`.
2. Ensure that there is one PHP class per file, and that the file extension is `.php` rather than `.inc`.
3. Ensure that the name of the file matches the name of the class - `FooArticleNodeMigration` would be in a file called `FooArticleNodeMigration.php`.
4. Add a namespace to each PHP file. This uses the same format as Drupal 8, including the machine name of the module. For example, `Drupal\foo_migrate`.
* If the class is within a sub-directory, then this will also need to be included within the namespace - e.g. `Drupal\foo_migrate\Node`.
* Youll also need to import any class names that you are referencing, including class names that are you extending, by adding `use` statements at the top of the file. You may be able to prefix it with `\` instead (e.g. `\DrupalNode6Migration`), but I prefer to use imports.
2. Ensure that there is one PHP class per file, and that the file extension is
`.php` rather than `.inc`.
3. Ensure that the name of the file matches the name of the class -
`FooArticleNodeMigration` would be in a file called
`FooArticleNodeMigration.php`.
4. Add a namespace to each PHP file. This uses the same format as Drupal 8,
including the machine name of the module. For example, `Drupal\foo_migrate`.
- If the class is within a sub-directory, then this will also need to be
included within the namespace - e.g. `Drupal\foo_migrate\Node`.
- Youll also need to import any class names that you are referencing,
including class names that are you extending, by adding `use` statements at
the top of the file. You may be able to prefix it with `\` instead (e.g.
`\DrupalNode6Migration`), but I prefer to use imports.
Now your class may look something like this:
@ -82,9 +107,11 @@ class FooArticleNodeMigration extends DrupalNode6Migration {
}
```
With these steps completed, any imports within your .info file can be removed as they are no longer needed and any classes will be loaded automatically.
With these steps completed, any imports within your .info file can be removed as
they are no longer needed and any classes will be loaded automatically.
Within `foo_migrate.migrate.inc`, I can now reference any class names using their full namespace:
Within `foo_migrate.migrate.inc`, I can now reference any class names using
their full namespace:
```language-php
$node_arguments['ArticleNode'] = array(
@ -96,11 +123,11 @@ $node_arguments['ArticleNode'] = array(
## Resources
* [xautoload module][1]
* [migrate module][5]
* [migrate_d2d module][6]
* [PSR-0][3]
* [PSR-4][4]
- [xautoload module][1]
- [migrate module][5]
- [migrate_d2d module][6]
- [PSR-0][3]
- [PSR-4][4]
[1]: https://www.drupal.org/project/xautoload
[2]: http://getcomposer.org