Eclipse PDT - изменения в файловой системе или новые Composer пути автозагрузки прерывают автозагрузчик - PullRequest
0 голосов
/ 23 апреля 2020

Я делаю проект в Composer с использованием Eclipse PDT , однако каждый раз, когда я добавляю файл в каталог ниже базовой директории composer, программа запуска phpunit больше не может найти мой файлы.

Как минимум 2 раза я немного повозился и снова заработал, но, похоже, он ломается каждый раз, когда я меняю файловую систему. Я хотел бы, чтобы автозагрузчик Composer находил мои файлы независимо от изменений fs.

Вот моя последняя конфигурация автозагрузчика:

{
    "name": "someone/webapp",
    "description": "",
    "require-dev":  {
        "phpunit/phpunit":"~9.0",
        "squizlabs/php_codesniffer": "~3.0"
    },
    "require": {
        "doctrine/orm": "~2.7"
    },
    "autoload" : {
        "psr-4": {
            "WebApp\\": "src/"
         }
    },
    "autoload-dev" : {
        "psr-4": {
            "WebApp\\Tests\\" : "tests/"
        }
    }
}

Я ранее пробовал свой автозагрузчик с PSR-0-совместимым стандарт:

{
     "name": "srmes/shopping-app-test",
     "description": "Developer test. Basic OO-orientated PHP webapp",
     "require-dev": {
        "phpunit/phpunit":"~9.0",
        "squizlabs/php_codesniffer": "~3.0"
     },
     "require": {
         "doctrine/orm": "~2.7"
     },
    "autoload" : {
         "classmap": ["src/", "src/Models/"],
         "psr-0": {
             "WebApp\\": "src/",
             "WebApp\\Models\\": "src/Models/"
         }
    },
    "autoload-dev" : {
         "classmap": ["tests/", "tests/Models/"],
         "psr-0": {
             "WebApp\\Tests\\" : "tests/"
         }
    }
}

Мой вопрос касается добавления файлов в каталоги автозагрузки. Моя структура каталогов выглядит следующим образом:

someone/webapp
|-vendor
| |-MISC_PACKAGES
|- src --autoloader base dir
| |-Models
| | |-Product.php
| | |-Furniture.php
| |- IComparable.php -- THIS WAS ADDED, BREAKING AUTOLOADER
|- tests -- autoloader base dir
| |- Models
| | |- FurnitureTest.php
| | |- IProductTest.php
| |-bootstrap.php

Редактировать:

Как показано в моем комментарии ниже, я обнаружил, что эта проблема связана с автозаполнением Eclipse PDT работает только после того, как была сделана фиксация на git с последующими новыми composer require операторами и т. д. c., что для меня не идеально, так как я хотел бы поэкспериментировать с пакетными пакетами перед фиксацией

1 Ответ

0 голосов
/ 08 мая 2020

Ваша проблема не имеет ничего общего с Eclipse PDT. В вашем composer вы зарегистрировали карту классов и PSR-0. Classmap требует composer для повторного сканирования вашего каталога, чтобы найти новые классы [1].

PSR-4 для вашего каталога src / будет достаточно. Например, если вы создадите, создайте класс WebApp \ Service \ Foo в src / Service / Foo. php автозагрузчик (например, phpunit) найдет его.

Предупреждение : Если вы используете "optimize-autoloader": true или запустите composer install с --optimize-autoloader или дамп-автозагрузку с --optimize ваш PSR4 / PSR-0 будет преобразован в карту классов !!!

Я предполагаю, что вы правильно зарегистрировали composer автозагрузчик как phpunit bootstrap.

[1] - https://getcomposer.org/doc/04-schema.md#classmap

...