Автозагрузка репозитория bitbucket + composer.json

Я хочу добавить репозиторий bitbucket в папку моего поставщика с помощью composer. Это то, что у меня есть в моем composer.json:

{
    "require": {
        "silex/silex": "~1.1",
        "doctrine/dbal": "2.2.*",
        "twig/twig" : "1.*",
        "symfony/twig-bridge": "~2.3",
        "twitter/bootstrap": "*",
        "symfony/assetic-bundle": "2.1.*",
        "leafo/lessphp": "*",
        "silex/web-profiler": "~1.0",
        "symfony/security": "~2.3",
        "symfony/form": "~2.3",
        "symfony/validator": "~2.3",
        "symfony/config": "~2.3",
        "symfony/translation": "~2.3",
        "monolog/monolog": ">=1.0.0",
        "symfony/yaml": "~2.3",
        "jasongrimes": "dev-master"
    },
    "autoload": {
        "psr-0": { "": "src/" }
    },
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "jasongrimes",
                "version": "dev-master",
                "source": {
                    "url": "mybitbucketurl",
                    "type": "git",
                    "reference": "origin/master"
                }
            }
        }
    ]
}

В моем репозитории bitbucket нет composer.json, который я хочу добавить через composer. Теперь, когда я запускаю свое приложение, я получаю следующую ошибку:

Fatal error: Class 'SimpleUser\UserServiceProvider' not found in app/bootstrap.php on line 82

Как я могу убедиться, что это тоже в автозагрузчике?

1 ответ

Решение

Когда вы указываете репозиторий пакетов, вы в основном предоставляете все детали, которые были бы в этом пакете composer.json, если бы он был. Для автозагрузки на работу, autoload свойство для пакета должно быть указано. Руководство композитора содержит подробную информацию о autoload собственность

Если ваш репозиторий bitbucket соответствует PSR-0 или PSR-4, вам просто нужно указать правильный стандарт и место, где должны быть загружены классы, которые хранятся в репозитории. Например, с PSR-4 и вашими классами, хранящимися в src/ каталог:

{
    "require": {
        "jasongrimes": "dev-master"
    },
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "jasongrimes",
                "version": "dev-master",
                "source": {
                    "url": "mybitbucketurl",
                    "type": "git",
                    "reference": "origin/master"
                },
                "autoload": {
                    "psr-4": { "": "src/" }
                }
            }
        }
    ]
}

В противном случае вы можете использовать classmap указать каталоги или файлы для сканирования .php или же .inc файлы с классами. Например, если класс, который вы пытаетесь загрузить, находится в файле SimpleUser/UserServiceProvider.php в вашем хранилище:

{
    "require": {
        "jasongrimes": "dev-master"
    },
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "jasongrimes",
                "version": "dev-master",
                "source": {
                    "url": "mybitbucketurl",
                    "type": "git",
                    "reference": "origin/master"
                },
                "autoload": {
                    "classmap": [ "SimpleUser/UserServiceProvider.php" ]
                }
            }
        }
    ]
}
Другие вопросы по тегам