Autoload

PHP Packages: Composer Autoload

Include the autoload with namespace in your project

1. Setup your psr-4 namespace and path mapping

We have to setup psr-4 autoload setting in the composer.json file.

{
  "autoload": {
    "psr-4": {
      "CompanyName\\Common\\": "some/path/to/common/",
      "CompanyName\\Customize\\": "other/path/to/customize/",
      "CompanyName\\Other\\": "complicated/path/to/other/"
    }
  }
}

The psr-4 DOESN’T care about the namespace having to exactly match the path structure.

Even if we have the same namespace that begins with CompanyName, we still can map to a different path with the same namespace prefix.

Namespace path
CompanyName\\Common\\ some/path/to/common/
CompanyName\\Customize\\ other/path/to/customize/
CompanyName\\Other\\ complicated/path/to/other/

After we set the namespace to the specific path that we want, then the composer will autoload the file depending on the namespace seting in the composer.json.

2. Generate autoload file

We can use the docker composer image to generate the autoload file in the vendor folder.

So go to the folder that includes the composer.json file, then run the following command to generate the vendor/autoload.php file

docker run --rm --interactive --tty \
  --volume $PWD:/app \
  composer dump-autoload

If your project needs to use the different composer version. You can specify the version name behind the docker composer image

docker run --rm --interactive --tty \
  --volume $PWD:/app \
  composer:1.9.3 dump-autoload

3. Include vendor/autoload.php file to your project

You can load the vendor/autoload.php, then the composer will help you to load every file depending on your psr-4 setting in the composer.json file

<?php

require_once __DIR__ . '/vendor/autoload.php';

Optimize autoload

The composer will look at all of your files inside the path that you set. So it might take a lot of time to search all files.

We can let composer search your all file first and pre-generate a file mapping array to optimize the loading speed.

docker run --rm --interactive --tty \
  --volume $PWD:/app \
  composer dump-autoload -o

Reference