добавить библиотеку в silex

Я знаю, что этот вопрос уже задавался, но кажется, что процесс автозагрузки немного изменился с composer.

Я просто хочу добавить библиотеку классов в свой проект silex.

Итак, я сделал этот файл: vendor\lib\picture.php

<?php
namespace MyNamespace;

class Picture
{
    function testage()
    {
        echo 'hihaaa ça marche'; exit;
    }
}

в vendor/composer/autoload_namespaces.php я добавил эту строку в большой массив:

'MyNamespace' => $vendorDir . '/lib/',

И в основной файл я добавил:

use MyNamespace\Picture as Picture;

и назвал это так:

$app->register(new Picture());

который дает мне эту ошибку:

Fatal error: Class 'MyNamespace\Picture' not found...

Я просто не знаю, как легко добавить класс, который я могу использовать с любого контроллера, без командной строки (я не использую композитор, я скачал предварительно настроенный silex), есть идеи?


person Vilrouge    schedule 21.07.2012    source источник


Ответы (3)


Если вы используете композитор, вам не следует менять каталог поставщика. Вы не должны добавлять в него файлы, и вы не должны изменять файлы, сгенерированные композитором.

Я рекомендую поместить эти классы в каталог src. @gunnx показывает, как вы можете настроить автозагрузку в composer.json, чтобы она генерировалась заново каждый раз, когда вы запускаете composer install.

Файл будет в src/MyNamespace/Picture.php. Конфигурация автозагрузки в composer.json будет такой:

{
    "autoload": {
        "psr-0": { "MyNamespace": "src/" }
    }
}

Фактическое решение представляет собой комбинацию двух предыдущих ответов. Но я думаю, что важно правильно продумать детали ;-).

person igorw    schedule 21.07.2012
comment
В конце своего вопроса он прямо говорит, что не использует композитор. - person Maerlyn; 26.07.2012
comment
Спасибо @igorw! Установка src/ заставила меня работать! =) (Хотя интересно, почему) - person sk8terboi87 ツ; 24.01.2013

Ваш класс Picture должен находиться в этом файле: vendor/lib/MyNamespace/Picture.php. Обратите внимание на полное пространство имен и регистр.

person Maerlyn    schedule 21.07.2012
comment
спасибо, ваш ответ действительно помогает. Я также добавляю для реализации ServiceProviderInterface и добавляю методы загрузки и регистрации, и теперь у меня нет ошибки. - person Vilrouge; 21.07.2012

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

{
"autoload": {
    "psr-0": {"Acme": "src/"}
}
person gunnx    schedule 21.07.2012