14

我正在使用 symfony 2.1,我想向供应商添加一个库。packagegist 中不存在该库。我无法用作曲家来管理它。当我通过 Composer 安装捆绑包或其他供应商时,它会为我管理自动加载。但是当供应商不受作曲家管理时,在哪里注册自动加载?

4

3 回答 3

16

您可以将不在 packagegist 中的库添加到作曲家。您必须将它们添加到文件的repositories数组中composer.json

以下是如何加载包含 composer.json 文件的 github 存储库,即使它不在 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.*"
  }
}
于 2012-07-15T22:53:08.040 回答
8

您应该能够使用 Composer 注册无法通过 packagist 获得的供应商库。我不完全确定,但这应该可以正常工作:

{
    "autoload": {
        "psr-0": {
            "Acme": "src/",
            "MyVendorLib": "vendor/my-vendor/src",
            "AnotherLib": "vendor/another-vendor/lib"
        }
    }
}
于 2012-07-15T22:46:00.383 回答
3

您只需要修改您的 composer.json 文件以获取自动加载值:

http://getcomposer.org/doc/04-schema.md#autoload

//composer.json 在你的 symfony 2.1 项目中
“自动加载”:{
     “psr-0”:{
         "": "src/",
         “你的图书馆”:“src/location/of/lib”
     }
},

然后在您的控制器中,例如:

命名空间 Acme\UserBundle\Controller;

使用 Symfony\Bundle\FrameworkBundle\Controller\Controller;
使用 Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
使用 YourLibrary\FolderName\ClassName;

类 DefaultController 扩展控制器 {

/**
 * @路线(”/”)
 * @模板()
 */
公共函数 indexAction()
{
   $lib = 新的类名();
   $lib->getName();

   返回数组('name' => $name);
}

}

于 2013-02-15T17:37:28.613 回答