当Symfony 2.1中的供应商未被Composer管理时,应该在哪里注册autoload?

14

我正在使用symfony 2.1,想要将一个库添加到vendors中。该库并不存在于packagist上。我不能使用composer进行管理。当我通过composer安装bundles或其他vendors时,它会自动为我管理autoload。但是当不使用composer管理vendor时,我应该在哪里注册autoload?


你有没有了解过 Satis?https://github.com/composer/satis 和 http://getcomposer.org/doc/articles/handling-private-packages-with-satis.md - Phill Pafford
3个回答

16
你可以将未在Packagist上的库添加到Composer中。你需要将它们添加到composer.json文件的repositories数组中。
以下是如何加载具有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.*"
  }
}

8
您应该能够使用Composer来注册未在Packagist上提供的供应商库。我不是完全确定,但这应该可以正常工作:
{
    "autoload": {
        "psr-0": {
            "Acme": "src/",
            "MyVendorLib": "vendor/my-vendor/src",
            "AnotherLib": "vendor/another-vendor/lib"
        }
    }
}

3

您只需要修改composer.json文件中的autoload值:

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

//在你的Symfony 2.1项目中的composer.json文件
"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); }
}

我以为在 use 语句中不能以 .php 结尾? - Lester Peabody

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接