Подключение классов php в проект через composer psr-4

Во время разработки, иногда необходимо подключить свои классы в проект, в автозагрузчик, помимо устанавливаемых через composer, в директорию vendor. Произвести такую операцию достаточно просто, я делюсь методом добавления любого количества классов, но после создания нового файла с классом будет необходимо выполнить команду composer dump-autoload -o. На официальном сайте composer.org, на странице документации, есть такое решение, посмотреть.

У нас может быть два варианта:


      Вариант 1 — уже есть подключаемые через composer пакеты, из папки vendor;
      Вариант 2 — нет подключаемых пакетов через composer и отсутствует файл composer.json.

Рассмотрим алгоритмы действий по этим двум вариантам.

Действия по первому варианту:

Как правило, у многих именно первый вариант, так как в проект уже подключаются пакеты и со временем может возникнуть необходимость подключить свои классы, поэтому необходимо отредактировать существующий файл composer.json, добавив в него конструкцию из примера ниже, в данном случае у меня уже подключен guzzle. Файлы собственных классов у меня лежат в директории src

{
 "require": {
        "guzzlehttp/guzzle": "^6.0"
    },
  "autoload": {
    "psr-4": { "": "src/" }
  }
}

И выполнить команду в терминале:

composer dump-autoload -o

В ответ придет подобное сообщение:

Generating optimized autoload files
Generated optimized autoload files containing 899 classes

В Вашем случае ответ может быть немного другой, с другим количеством классов.

Рассматривая первый вариант, я предполагаю, что в Вашем файле, куда необходимо подключать файлы классов, уже присутствует такая конструкция:

set_include_path(__DIR__);
require 'vendor/autoload.php';

Если нет, то добавьте. В моем случае директория vendor находится в корне проекта, в Вашем путь может быть немного другим, также в моем случае, во избежание различных ситуаций, устанавливаю текущую директорию в значение include_path, при помощи функции set_include_path. Это не обязательная строка.

После этих действий можно создавать классы в папке src, вызывать команду composer dump-autoload -o и создавать объекты в других файлах, все будет работать.

Действия по второму варианту:

Создание директории src. Сохранение туда файлов с Вашими php классами.

Убедиться, что у Вас установлен composer, можно проверить командой в терминале:

composer -v

Если он установлен, то придет подобное сообщение:

   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 2.0.14 2021-05-21 17:03:37
Usage:
  command [options] [arguments]

Options:
  -h, --help                     Display this help message
  -q, --quiet                    Do not output any message
  -V, --version                  Display this application version
      --ansi                     Force ANSI output
      --no-ansi                  Disable ANSI output
  -n, --no-interaction           Do not ask any interactive question
      --profile                  Display timing and memory usage information
      --no-plugins               Whether to disable plugins.
  -d, --working-dir=WORKING-DIR  If specified, use the given directory as working directory.
      --no-cache                 Prevent use of the cache
  -v|vv|vvv, --verbose           Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
.....
.....
.....

Следующим шагом будет создание файла composer.json, с таким содержимым:

{
  "autoload": {
    "psr-4": { "": "src/" }
  }
}

И выполнить команду в терминале:

composer dump-autoload -o

Теперь можно использовать классы из директории src, в своих проектах, но после каждого нового файла класса необходимо повторить команду composer dump-autoload -o И убедиться, что у Вас в файле, куда будут автоматически подключаться классы есть require ‘vendor/autoload.php’;

Подключение из разных директорий.

По разным причинам может случиться так, что подключать классы нужно будет из разных директорий, тогда необходимо модифицировать файл composer.json:

{
    "autoload": {
        "classmap": ["src/", "lib/", "Testcass.php"]
    }
}

И опять выполнить команду в терминале:

composer dump-autoload -o

Теперь автозагрузка будет работать из разных директорий и просто еще для отдельного файла Testcass.php.

Подстановочные знаки ( *) также поддерживаются в путях карты классов и расширяются, чтобы соответствовать любому имени каталога:

{
    "autoload": {
        "classmap": ["src/classes/*/lib/", "testdir/*", "Testclass.php"]
    }
}

Код из примеров был протестирован на php версии 8, composer версии 2.0.14.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *