0

我试图掌握如何在我的 Symfony2 项目中包含启用 PSR-0 的外部库。在“PSR-0 类加载器”页面(这里:http ://symfony.com/doc/master/components/class_loader/class_loader.html “)。

正在编辑哪个文件?如果它是 app/autoloader.php,我的看起来与呈现的不同:

use Doctrine\Common\Annotations\AnnotationRegistry;
use Composer\Autoload\ClassLoader;
/**
 * @var $loader ClassLoader
 */
$loader = require __DIR__.'/../vendor/autoload.php';
AnnotationRegistry::registerLoader(array($loader, 'loadClass'));
return $loader;

我必须在退货前包含此代码吗?或者它应该在被调用的其他文件中?仍然如果它是 app/autoload.php,不应该是这段代码:

// register several namespaces at once
$loader->addPrefixes(array(
    'Symfony' => __DIR__.'/../vendor/symfony/symfony/src',
    'Monolog' => __DIR__.'/../vendor/monolog/monolog/src',
));

改为 addNamespaces 吗?一旦我成功声明了这个库,我该如何使用它?

4

1 回答 1

1

是的,请注意 app/autoload.php 文件获取从 vendor/autoload.php 返回的 $loader 实例。因此,您链接到的文档提供了一个示例,您在其中显式创建了一个新实例,但实际上,使用 app/autoload.php,该实例已准备好等待您。

关于创建一个新的库集,假设我想创建一个名为“MyLibrary”的新库,它会在 src 目录中,之后:

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

我要声明以下内容:

$loader->addPrefix('MyLibrary', __DIR__.'/../src');

现在我会:

$ cd src

$ mkdir MyLibrary

$ mkdir MyLibrary/Component

$ mkdir MyLibrary/Component/SomeClasses

$ vim MyLibrary/Component/SomeClasses/MyClass.php

MyClass.php:

<?php

    namespace MyLibrary\Component\SomeClasses;

    class MyClass
    {
        ...
    }

在另一个想要使用该类的文件中,在文件顶部,在命名空间声明之后(如果有的话):

<?php

...

use MyLibrary\Component\SomeClasses\MyClass;

$myClass = new MyClass();

然而,我从来没有发现需要如此明确地这样做,因为我会创建一个 Symfony Bundle,它实际上是一个执行特定任务的库,然后将你的代码放入包中。创建一个包是有据可查的。

于 2014-06-30T12:39:23.693 回答