Как подключить к Symfony 2 стороннюю библиотеку?

Здравствуйте, уважаемые it-специалисты.

Для проекта требуется подключить стороннюю библиотеку, которая по сути всего один файл с классом. Не бандл, а просто библиотека.
Symfony у нас с composer'ом.

После продолжительного гугления сделал следующее:
1. Класс постарался подогнать под стандарт PSR-0
2. Добавил файл с composer.json
3. Залил на github (https://github.com/musaev-haybulla/FloydWarshall)
4. Выложил на packagist (https://packagist.org/packages/musaevhs/floyd-warshall)
5. Командой composer require "musaevhs/floyd-warshall:dev-master" прицепил его к проекту.
6. Пробую вызвать в сервисе вот так:

use Musaevhs;

class RoutePlanService
{

/**
     * @param RoutePlan $routePlan
     * @return array
     */
    public function minRoute(RoutePlan $routePlan)
    {
        $fl = new \FloydWarshall([0 => [1], [1] => [0]]);
    }
}


На что получаю:

The autoloader expected class "FloydWarshall" to be defined in file "/Users/musaevhs/srv/tabularium/vendor/musaevhs/floyd-warshall/src/FloydWarshall.php". The file was found but the class was not in it, the class name or namespace probably has a typo.

7. Гуглим, находим указания в классе выставить <?php, но у меня в классе сие выставлено.

Пока в ступоре, не понимаю, где и как я ошибся.
Процедура подключения, конечно, как стыковка космических кораблей...

Есть мысли, как мне использовать класс в своем проекте?.. Я может с неймспейсами накосорезил или еще где?..
  • Вопрос задан
  • 771 просмотр
Решения вопроса 1
prototype_denis
@prototype_denis
Symfony
Файл должен находиться по пути /Musaevhs/FloydWarshall.php

В composer'е /src/Musaevhs/FloydWarshall.php равносилен Musaevhs\FloydWarshall

С вашим
"psr-0": { "FloydWarshall": "src/" }

будет
use FloydWarshall\Musaevhs\FloydWarshall; (С добавлением папки)
use FloydWarshall\FloydWarshall; (Если убрать namespace в файле)
use Musaevhs\FloydWarshall; (Если убрать FloydWarshall в composer)
use FloydWarshall; (Если namespace и FloydWarshall в composer)

"psr-0": { "": "src/FloydWarshall" } - (По идее не прокатит)

В общем измените структуру
src/
    Musaevhs/ <-- добавив папку
        FloydWarshall.php
composer
"psr-0": { "": "src/" }
И подключение либы
use Musaevhs\FloydWarshall;


www.php-fig.org/psr/psr-0/ru Deprecated
Смотрите www.php-fig.org/psr/psr-4/ru
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@jaxel
А зачем такие сложности ради одного файла с классом? Не вижу смысла заливать на packagist чужую библиотеку. Просто положите его в свой бандл, пропишите ему неймспейсы, сделайте по необходимости сервис и всё.
Ответ написан
AloneCoder
@AloneCoder
[object Object]
$fl = new Musaevhs\FloydWarshall([0 => [1], [1] => [0]]);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы