Я использую symfony 2.1, и я хочу добавить библиотеку к поставщикам. Библиотека не существует в пакете. Я не могу справиться с композитором. Когда я устанавливаю пакеты или другие поставщики через композитор, он управляет автозагрузкой для меня. Но где регистрировать автозагрузку, когда поставщик не управляется с помощью композитора?
Где регистрировать автозагрузку, когда поставщик не управляется с помощью композитора в Symfony 2.1?
Ответ 1
Вы можете добавлять библиотеки в композитор, которые не входят в пакет.
Вы должны добавить их в массив repositories
вашего файла composer.json
.
Здесь, как загрузить репозиторий github, у которого есть файл composer.json, даже если он не на packagist (например, вилка, которую вы бы сделали, чтобы исправить репозиторий): http://getcomposer.org/doc/02-libraries.md#publishing-to-a-vcs
И здесь, как загрузить библиотеку, которая находится в репозитории git/svn, или zip файл: http://getcomposer.org/doc/05-repositories.md#types
Пример использования различных возможностей:
{
"repositories": [
{
"type": "vcs",
"url": "http://github.com/igorw/monolog"
},
{
"type": "package",
"package": {
"name": "smarty/smarty",
"version": "3.1.7",
"dist": {
"url": "http://www.smarty.net/files/Smarty-3.1.7.zip",
"type": "zip"
},
"source": {
"url": "http://smarty-php.googlecode.com/svn/",
"type": "svn",
"reference": "tags/Smarty_3_1_7/distribution/"
},
"autoload": {
"classmap": [
"libs/"
]
}
}
}
],
"require": {
"monolog/monolog": "dev-bugfix",
"smarty/smarty": "3.1.*"
}
}
Ответ 2
Вы должны иметь возможность использовать Composer для регистрации библиотек поставщиков, недоступных через packagist. Я не совсем уверен, но это должно работать нормально:
{
"autoload": {
"psr-0": {
"Acme": "src/",
"MyVendorLib": "vendor/my-vendor/src",
"AnotherLib": "vendor/another-vendor/lib"
}
}
}
Ответ 3
Вам просто нужно изменить файл composer.json для значения автозагрузки:
http://getcomposer.org/doc/04-schema.md#autoload
//composer.json in your symfony 2.1 project "autoload": { "psr-0": { "": "src/", "YourLibrary": "src/location/of/lib" } },
И затем в вашем контроллере, например:
namespace Acme\UserBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use YourLibrary\FolderName\ClassName; class DefaultController extends Controller { /** * @Route("/") * @Template() */ public function indexAction() { $lib = new ClassName(); $lib->getName(); return array('name' => $name); } }