如何在Symfony 2中使用第三方库

时间:2012-10-22 14:15:43

标签: symfony

我有一个类处理一些API集成,我希望在我的主站点包中提供它,如下所示:

class ACH {
  public function __constructor();
  public function addACHTransaction();
  ...
}

如何在Symfony 2中集成此类,以便我可以通过执行以下操作在我的控制器和实体中使用它:

$ach = new ACH();

* 编辑:* 以下是我的autoload.php文件的内容。

use Doctrine\Common\Annotations\AnnotationRegistry;

$loader = require __DIR__.'/../vendor/autoload.php';

// intl
if (!function_exists('intl_get_error_code')) {
    require_once __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs/functions.php';

    $loader->add('', __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs');
}

AnnotationRegistry::registerLoader(array($loader, 'loadClass'));

return $loader;

2 个答案:

答案 0 :(得分:3)

尝试使用Symfony ClassLoader Component

如果您的第三方库不遵循symfony标准(即使用命名空间),您可能需要创建一个新的包装类。对于sf2.0,请查看此blog article

编辑:此reddit post解释了如何处理Call to undefined method Composer\Autoload\ClassLoader::registerPrefixes()错误。我还没有测试过,但是对于sf2.1,ClassLoader文档可能还不是最新的。

app/autoload.php文件中添加以下行:

$loader->add('foo_', __DIR__.'/../vendor/Foo/lib');
set_include_path(__DIR__.'/../vendor/Foo/lib'.PATH_SEPARATOR.get_include_path());

答案 1 :(得分:1)

ClassLoader Composer的使用与ClassLoader Symfony提供的不同。试试以下,

$achMap = array(
    'ACH' => 'path/of/ACH.php'
);
$loader->addClassMap($achMap);