Загружать пространства имен с композитором как библиотеки psr-0

Я использую Silex (и, следовательно, композитор) для любого проекта веб-приложения.

Я хотел бы автоматически загрузить 4 объекта и формы:

  1. ФСБ\МойПроект\Объект\Букинг --> /src/ФСБ/МойПроект/Энтити/Букинг.php
  2. ФСБ\МойПроект\Форма\ТипБукинга --> /src/ФСБ/МойПроект/Форма/ТипБукинга.php
  3. FSB\MyProject\Entity\Contact --> /src/FSB/MyProject/Entity/Contact.php
  4. FSB\MyProject\Form\ContactType --> /src/FSB/MyProject/Form/ContactType.php

composer.json определяется с помощью массива psr-0:

{
    "require": {
        "silex/silex": "~1.0",
        [...]
    },
    "autoload": {
        "psr-0": {
            "FSB": "src/"
        }
    }
}

Затем в моем файле index.php я просто вызываю:

use FSB\MyProject\Entity\Contact;
use FSB\MyProject\Form\ContactType;
use FSB\MyProject\Entity\Booking;
use FSB\MyProject\Form\BookingType;

$contact = new Contact();

Все отлично работает в моей среде разработки, MAMP, php 5.4

Но он ломается на моем рабочем сервере, Apache2 на Ubuntu с PHP 5.4 тоже

"Фатальная ошибка PHP: класс "FSB\MyProject\Entity\Contact" не найден в /[...]/index.php"

Я пробовал много способов загрузить свои объекты, например:

{
    "require": {
        "silex/silex": "~1.0",
        [...]
    },
    "autoload": {
        "psr-0": {
            "FSB/Palmeraie": "src/",
        }
    }
}

Или даже:

{
    "require": {
        "silex/silex": "~1.0",
        [...]
    },
    "autoload": {
        "psr-0": {
            "FSB\\Palmeraie\\Entity": "src/",
            "FSB\\Palmeraie\\Form": "src/"
        }
    }
}

--> В моей среде разработки работает несколько способов; ни в моей производственной среде...

Я что-то пропустил ?


person Flo Schild    schedule 02.08.2013    source источник


Ответы (2)


Проверьте правильность написания заглавных букв в именах файлов/каталогов, имена файлов в OS X нечувствительны к регистру, в отличие от файловых систем Linux/Unix.

person cschorn    schedule 02.08.2013
comment
На самом деле мне было интересно, как эти папки должны быть написаны? На самом деле у меня есть папка src/ в нижнем регистре и папки FSB/MyProject/Entity, как написано здесь. - person Flo Schild; 02.08.2013
comment
Вы можете написать их как хотите, хотя CamelCase является соглашением. Но путь к файлу, пространства имен и имена классов должны точно совпадать. - person cschorn; 02.08.2013
comment
И я должен уточнить что-то для psr-0? Я имею в виду автозагрузку: { psr-0: { FSB/MyProject: src/ }} или лучше оставить поле пустым? (автозагрузка: {psr-0: {: источник/}} - person Flo Schild; 02.08.2013
comment
Если у вас есть только один базовый каталог, можно использовать "". - person cschorn; 02.08.2013
comment
Наконец, я думаю, ему не нравится мое имя, я просто обновил его другим пространством имен, и оно работает... Но нет способа заставить его работать с полным пространством имен Me\MyProject\Entity и т. д. Во всяком случае, на этот раз это работает . - person Flo Schild; 11.08.2013

Выполните «обновление композитора», и он снова заработает.

person José Nicodemos Maia Neto    schedule 22.01.2014