Symfony2 - Использование старой внешней библиотеки без пространств имен

Позвольте мне предварить это, сказав, что обычно я не являюсь разработчиком PHP и являюсь полным новичком, когда дело доходит до Symfony2. Меня втянули в этот проект, и у нас очень сжатые сроки.

С этим из пути, вот моя проблема:

В моей компании у нас есть библиотека PHP для внутреннего API, которая устарела; он не использует пространства имен и на самом деле не следует никаким стандартным соглашениям об именах, таким как PSR-0 или PEAR. Однако мне нужно использовать это в нашем проекте Symfony2. Очевидно, Symfony2 во многом полагается на пространства имен. Я полностью облажался, если не обновлю библиотеку, чтобы следовать «новым» соглашениям, или я все равно могу ее как-то использовать? Дело в том, что это довольно большая библиотека, и у нас просто нет времени делать это прямо сейчас (кто-то должен был сделать это давным-давно, но это уже другая тема...).

Теоретически, могу ли я просто поместить библиотеку в vendor/ и использовать старые добрые требования/включения в своих пакетах? Будет ли это вообще работать? Не получу ли я после этого толпу разгневанных разработчиков Symfony/PHP?

Или есть лучший способ, о котором я не знаю?


person 07kro    schedule 03.09.2014    source источник
comment
Совершенно нормально делать то, что вы предложили. Одна из основных библиотек фреймворка Symfony 2 (Twig) не имеет пространства имен. Единственное, если в вашей библиотеке есть классы, вам нужно использовать \ClassName для ссылки на них. Вот пример: symfony.com/doc/current/cookbook/templating/twig_extension .html   -  person Cerad    schedule 03.09.2014
comment
И если в библиотеке есть только несколько общедоступных сущностей, вы можете написать пакет Symfony 2, который будет действовать как интерфейс. Это сделает ваше приложение современным. Но это не обязательно.   -  person Cerad    schedule 03.09.2014


Ответы (1)


Вы можете сделать то, что предложили, и даже можете использовать MapClassLoader, и дайте ему статическую карту между вашими классами и вашими файлами, так что вам даже не нужно требовать файлы из вашей библиотеки. Вам не нужно писать эту карту вручную, вы можете сгенерировать ее с помощью класса генератор карт

person greg0ire    schedule 03.09.2014
comment
Спасибо, это выглядит многообещающе. - person 07kro; 04.09.2014