Какие файлы редактируются в разделе "Компоненты -> Загрузчик классов 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, который по сути является библиотекой, выполняющей определенную задачу, а затем поместил ваш код в пакет. Создание пакета хорошо задокументировано.