Какие файлы редактируются в разделе "Компоненты -> Загрузчик классов PSR-0" в Symfony2?

Я пытаюсь понять, как включить внешнюю библиотеку с поддержкой PSR-0 в мой проект Symfony2. На странице "Загрузчик классов 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 вместо этого? и когда мне удастся объявить эту библиотеку, как мне ее использовать?

1 ответ

Решение

Да, обратите внимание, что файл app/autoload.php извлекает экземпляр $loader, который возвращается из vendor/autoload.php. Итак, документация, на которую вы ссылаетесь, дает пример, где вы явно создаете новый экземпляр, но на самом деле, используя 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, который по сути является библиотекой, выполняющей определенную задачу, а затем поместил ваш код в пакет. Создание пакета хорошо задокументировано.

Другие вопросы по тегам