Использование автозагрузки Composer

Я искал вокруг сети без удачи в этом вопросе. Я использую композиторs автозагрузка с этим кодом в моем:composer.json

"autoload": {
    "psr-0": {"AppName": "src/"}
}

Но мне нужно автозагрузка на более высоком уровне, чем папка вендора.

Делать что-то вроде этого не получается:

"autoload": {
    "psr-0": {"AppName": "../src/"}
}

Кто-нибудь знает исправление или как я могу это сделать?

Ответы на вопрос(6)

Способы, которые могут быть полезны для загрузки пакетов без пространств имен или пакетов, которые поставляются с пользовательской функцией автозагрузки.

Например, если вы хотите включить один файл, который также содержит функцию автозагрузки, вы можете использовать "файлы» директива следующим образом:

"autoload": {
    "psr-0": {
        "": "src/",
        "SymfonyStandard": "app/"
    },
    "files": ["vendor/wordnik/wordnik-php/wordnik/Swagger.php"]
},

И внутриSwagger.php файл, который мы получили:

function swagger_autoloader($className) {
    $currentDir = dirname(__FILE__);
    if (file_exists($currentDir . '/' . $className . '.php')) {
        include $currentDir . '/' . $className . '.php';
    } elseif (file_exists($currentDir . '/models/' . $className . '.php')) {
        include $currentDir . '/models/' . $className . '.php';
    }
}
spl_autoload_register('swagger_autoloader');

https://getcomposer.org/doc/04-schema.md#files

В противном случае вы можете использовать ссылку на карту классов:

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

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

Замечания: во время ваших тестов не забудьте запустить композиторdump-autoload команда или ты выигралне вижу никаких изменений!

./composer.phar dump-autoload

Удачной автозагрузки =)

им образом, вы можете изменить каталог поставщика, например,

{
    "config": {
        "vendor-dir": "../vendor/"
    },
    "autoload": {
        "psr-0": {"AppName": "src/"}
    }
}

Или нетЭто возможно в вашем проекте?

 Alastair Irvine02 дек. 2016 г., 20:47
Некорректное;src/ относительно корня проекта, а неvendor, Увидетьgetcomposer.org/doc/01-basic-usage.md#autoloading.
 acme12 дек. 2013 г., 16:24
Хорошо, спасибо за ваш ответ, я только что отредактировал его. Странно, что этозаблокирован ...

указывающего на папку, содержащую ваши классы ...

ln -s ../src/AppName ./src/AppName

Ваша автозагрузка в композиторе будет выглядеть так же ...

"autoload": {
    "psr-0": {"AppName": "src/"}
}

И ваши классы пространства имен AppName начнут каталог с вашего текущего рабочего каталога вsrc папка сейчас ... это должно работать.

 Robin Pierrot10 февр. 2016 г., 17:34
Здравствуйте ! Спасибо вам'единственный, который я нашел с моей конфигурацией, может быть, вы могли бы помочь мне :) Я также создал символическую ссылку, но когда я запускаюcomposer update -o Композитор нене понимаю папку классов. У тебя есть идея? Пожалуйста ..

Сергия ответ должен быть выбранным ответом на данный вопрос. Я'Я делюсь своим пониманием.

Я искал для автозагрузки мои файлы пакета, используя composer, который у меня есть в структуре dir, приведенной ниже.

<web-root>
    |--------src/
    |           |--------App/
    |           |
    |           |--------Test/
    |
    |---------library/
    |
    |---------vendor/
    |           |
    |           |---------composer/
    |           |           |---------autoload_psr4.php
    |           |           
    |           |----------autoload.php
    |
    |-----------composer.json
    |
</web-root>

м используюPSR-4 автозагрузка спецификации.

Пришлось добавить ниже строки в проект »s composer.json. Я намереваюсь поместить мои файлы классов в каталог src / App, src / Test и library.

"autoload": {
        "psr-4": {
            "OrgName\\AppType\\AppName\\": ["src/App", "src/Test", "library/"]
        }
    } 

Это в значительной степени самоочевидно.OrgName \ AppType \ AppName мой предполагаемый префикс пространства имен. например, для пользователя класса вsrc / App / Controller / Provider / User.php -

namespace OrgName\AppType\AppName\Controller\Provider; // namespace declaration

use OrgName\AppType\AppName\Controller\Provider\User; // when using the class

Также обратите вниманиеsrc / App ","SRC / Test» .. из вашего веб-корня, где ваш composer.json. Ничего общего с вендором реж. взгляните на vendor / autoload.php

Теперь, если композитор установлен правильно, все, что требуется, это#composer update

После обновления композитора мои классы загружены успешно. Я заметил, что composer добавляет строку в vendor / composer / autoload_psr4.php

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
    'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
    'OrgName\\AppType\\AppName\\' => array($baseDir . '/src/App', $baseDir . '/src/Test', $baseDir . '/library'),
);

Вот как карты композитора. Для psr-0 сопоставление находится в vendor / composer / autoload_classmap.php

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

После добавления поля автозагрузки необходимо повторно запустить установку, чтобы заново сгенерировать файл vendor / autoload.php.

При условии вашего "ЦСИ» dir находится на том же уровне, что и "поставщик» реж:

ЦСИИмя приложенияпродавецcomposer.json

следующий конфиг абсолютно корректен:

{
    "autoload": {
        "psr-0": {"AppName": "src/"}
    }
}

но вы должны повторно обновить / установить зависимости, чтобы он заработал для вас, то есть запустить:

php composer.phar update

Эта команда получит последние версии зависимостей и обновит файл "продавец / композитор / autoload_namespaces.php» чтобы соответствовать вашей конфигурации.

Также, как отмечает @Dom, вы можете использоватьcomposer dump-autoload обновить автозагрузчик без необходимости проходить обновление.

 Dom25 нояб. 2016 г., 13:15
дон»Вам просто нужно запустить `composer dump-autoload '?
 Sergiy Sokolenko05 нояб. 2018 г., 13:25
@ Спасибо за подсказку, я добавил в свой ответ dump-autoload.
Решение Вопроса

ь с помощью классов автозагрузки, которые не входят в определенный вами пакет?

Один обходной путь, если этоs для вашего приложения - добавить пространство имен к экземпляру загрузчика, примерно так:

<!--?php

$loader = require 'vendor/autoload.php';
$loader--->add('AppName', __DIR__.'/../src/');
 gw008 февр. 2017 г., 22:09
@alexndreazevedo Спасибо. Я рвал на себе волосы в течение получаса, так как мой проект следовал PSR-4, и это не былот загружается правильно, используяadd(), Я'Мы представили обновление ответа выше, чтобы упомянутьaddPsr4() метод вместо
 alexndreazevedo21 дек. 2016 г., 20:10
Пожалуйста, учтите также, что функция$loader->add() загружает только с использованием PSR-0. Для загрузки в качестве PSR-4 используйте$loader->addPsr4() вместо.
 Sergiy Sokolenko12 мар. 2013 г., 10:23
Это может быть полезно для автозагрузки классов в тестовом наборе, но реальное решение проблемы @ chris-r - это запустить "Обновление composer.phar ".
 Renish Khunt27 сент. 2014 г., 19:55
Большое спасибо, что это работа, после двух часов поиска я нашел это решение, спасибо, так много, дорогой

Ваш ответ на вопрос