Richter web-программист: создание сайтов, написание интернет-магазинов, создание скриптов на PHP, MySQL, JavaScript. Качественная верстка HTML, CSS. Системы управления сайтом, CMS. Оптимизация для поисковиков
English version

Статьи веб-программиста: Composer: настройка автозагрузки в проекте

Один из проектов
Региональный интернет-портал "Весь Великий Новгород" Проект активно работал с 2000 по 2005 годы и включал в себя более 20 сайтов. В течение 1.5 лет я принимал участие в разработке и поддержке проекта в качестве web-программиста. Мной были выполнены механизмы для нескольких досок объявлений, системы конкурсов (проведение сразу нескольких конкурсов, разбиение на темы, архивация, автомат определения победителей, удобный администратор), механизм баннерной сети с администратором, система виртуальных открыток, система рассылки новостей (автоматическая рассылка новостей неограниченного числа сайтов, возможность создания пользовательских рассылок).

Также осуществлялась информационная поддержка сайтов портала и программная модернизация таких ресурсов, как интернет-каталог (включая систему рейтинга и счетчики), сайт о мероприятиях досуга, внутренняя баннерная сеть.

Система построения сайта SBS "Web-Pro"
SBS Web-Pro Средство для создания и удобного управления сайтом, имеющее расширенные по сравнению с CMS (Content Management System) характеристики. Более 5 лет успешного использования. Подробнее
Пишите!
Telegram
@richter_a
ICQ
176621941

Composer: настройка автозагрузки в проекте

К списку статей

В предыдущей статье было объяснено, как создать проект, подключить к нему нужные пакеты. Кратко была упомянута автозагрузка классов пакетов, которую организует автоматически Composer. А как быть, если мы хотим, чтобы написанные нами классы тоже имели возможность автозагрузки через Composer, например, если мы создаем проект-библиотеку, которая будет использоваться в других проектах? Разберёмся!

Сначала создаем проект, как и в прошлый раз - всё то же самое. Когда же нам понадобится сделать автозагрузку созданных нами классов, обратимся к composer.json в корне проекта. Если полистаем папки, увидим, что такие файлы есть в уже установленных пакетах, и в них есть раздел autoload. Вот такой раздел нужно создать и в нашем composer.json.
В этом разделе нужно перечислить пространства имён, классы, папки и файлы, которые мы хотим загружать автоматически через Composer. Почему так много типов? На самом деле, в основном указывают только пространства имён, а остальное реже.

В разделе autoload допустимы 4 вида указаний:

  • psr-0 - устаревшее, не рассматривается.
  • psr-4 - основной тип, описывающий пространства имён. Например:
    
      "autoload": {
        "psr-4": {
          "Namespace1\\": "our_classes/",
          "Namespace2\\": "our_classes/some_sub_classes/",
        }
      }
    
    Таким образом мы сообщаем Composer'у, где располагаются наши пространства имён и описания классов.
  • classmap - для поиска просто классов. Нужно указать папки, где искать классы. Например:
    
        "autoload": {
            "classmap": ["other_classes/"]
        }
    
    Этим мы говорим, что указанную папку нужно просканировать и найти классы, которые тоже следует автозагружать, но они не соответствуют стандарту PSR-4.
  • files - для подключения файлов, которые должны включаться (require, include и т.п.). Нужно указать файлы. Например:
    
        "autoload": {
            "files": ["lib/some_file.php"]
        }
    
    А здесь мы просто указываем файл, который должен быть включён. В нём могут находиться какие-то функции и прочий код.
Все пути указываются от корня проекта.

Подробнее: https://getcomposer.org/doc/04-schema.md#autoload

После того, как мы изменили composer.json, запускаем:

php composer.phar dump-autoload

Этим Composer обновляет свои файлы автозагрузки, выполняя указания, полученные в разделе autoload.

На этом всё. Теперь вы можете публиковать проект, и когда его скачают и захотят использовать как библиотеку, его классы и файлы будут подключены автоматически.

© 2018 Richter
Распространение только с разрешения автора
Рейтинг: 0.0. Голосов: 0
(0) Добавить комментарий

Наверх