Подтвердить что ты не робот

Где регистрировать автозагрузку, когда поставщик не управляется с помощью композитора в Symfony 2.1?

Я использую symfony 2.1, и я хочу добавить библиотеку к поставщикам. Библиотека не существует в пакете. Я не могу справиться с композитором. Когда я устанавливаю пакеты или другие поставщики через композитор, он управляет автозагрузкой для меня. Но где регистрировать автозагрузку, когда поставщик не управляется с помощью композитора?

4b9b3361

Ответ 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);
}

}