0

我正在遵循Symfony 标准版的基本描述,了解如何使用 Symfony 2 设置新应用程序。

问题是,这个指南和所有其他指南都解释说我需要一个供应商目录,我应该在其中放置第三方库,例如 Doctrine、Swiftmailer 和 Symfony 本身。

然而,Zend Server PEAR 已经附带了几乎所有这些库。如你所知,我什至可以使用 pear update 命令更新我的 Symfony 和 Doctrine 版本。

问题是:如何设置该基本应用程序以有效使用我的 PEAR 库并忽略供应商目录?

这是我的app/autoload.php版本:

use Symfony\Component\ClassLoader\UniversalClassLoader;
use Doctrine\Common\Annotations\AnnotationRegistry;

$loader = new UniversalClassLoader();
$loader->registerNamespaces(array(
    'Symfony'          => array(__DIR__.'/../vendor/symfony/src', __DIR__.'/../vendor/bundles'),
    'Sensio'           => __DIR__.'/../vendor/bundles',
    'JMS'              => __DIR__.'/../vendor/bundles',
    'Doctrine\\Common' => __DIR__.'/../vendor/doctrine-common/lib',
    'Doctrine\\DBAL'   => __DIR__.'/../vendor/doctrine-dbal/lib',
    'Doctrine'         => __DIR__.'/../vendor/doctrine/lib',
    'Monolog'          => __DIR__.'/../vendor/monolog/src',
    'Assetic'          => __DIR__.'/../vendor/assetic/src',
    'Metadata'         => __DIR__.'/../vendor/metadata/src',
));
$loader->registerPrefixes(array(
    'Twig_Extensions_' => __DIR__.'/../vendor/twig-extensions/lib',
    'Twig_'            => __DIR__.'/../vendor/twig/lib',
));

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

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

$loader->registerNamespaceFallbacks(array(
    __DIR__.'/../src',
));
$loader->register();

AnnotationRegistry::registerLoader(function($class) use ($loader) {
    $loader->loadClass($class);
    return class_exists($class, false);
});
AnnotationRegistry::registerFile(__DIR__.'/../vendor/doctrine/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php');

// Swiftmailer needs a special autoloader to allow
// the lazy loading of the init file (which is expensive)
require_once __DIR__.'/../vendor/swiftmailer/lib/classes/Swift.php';
Swift::registerAutoload(__DIR__.'/../vendor/swiftmailer/lib/swift_init.php');

很明显,自动加载器被配置为从供应商目录加载库。但是,我想使用 pear 包附带的库。那将如何实施?

4

1 回答 1

0

只需编辑 app/autoload.php 以指向您的梨交付包。请注意使用正确的版本。只使用 Symfony 提供的包然后添加到任何其他库的路径可能会更安全。

于 2012-03-12T14:40:40.907 回答