1. Физическая папка в файловой системе: `settings` (строчные буквы)
- Правило: Все папки в проекте должны называться в нижнем регистре (например, `lib/settings/`).
- Причина:
- Кроссплатформенная совместимость (Linux/Mac чувствительны к регистру, Windows — нет).
- Соответствие рекомендациям PSR-4 и Composer.
- Пример пути:
/local/modules/decorateursite/lib/settings/FormOptionsBuilder.php
2. Namespace в коде: `Settings` (заглавная буква)
- Правило: Пространство имён (namespace) должно отражать логическую структуру и начинаться с заглавной буквы, даже если папка в lowercase.
- Пример:
namespace Bazarow\DecorateUrSite\Settings; // Заглавная "S"!
class FormOptionsBuilder {}
- Важно:
- Битрикс и Composer не требуют точного соответствия регистра папки и namespace.
- Но для единообразия лучше использовать `namespace Settings` + папку `settings/`.
3. Автозагрузка в `include.php`
Регистрация класса должна точно совпадать с namespace (заглавные буквы):
CModule::AddAutoloadClasses('decorateursite', [
'Bazarow\\DecorateUrSite\\Settings\\FormOptionsBuilder' => 'lib/settings/FormOptionsBuilder.php',
]);
- Путь к файлу (`lib/settings/`) — в lowercase.
- Namespace (`Settings`) — с заглавной буквы.
4. Почему такая путаница?
- Исторически в Битрикс папки часто называли в lowercase (например, `classes/general/`).
- PSR-4 допускает несоответствие регистра папки и namespace, но это усложняет поддержку.
- Лучшая практика:
Папка: lib/settings/ → namespace: Settings
5. Что делать, если класс не находится?
1. Проверьте:
- Физический путь: `lib/settings/FormOptionsBuilder.php` (строчные буквы).
- Namespace в файле: `namespace Bazarow\DecorateUrSite\Settings` (заглавная "S").
- Регистр в `AddAutoloadClasses()` (должен совпадать с namespace).
2. Очистите кэш Битрикс:
bash
php /bitrix/modules/main/tools.php clear_cache
Итог
Объект | Регистр | Пример |
---|---|---|
Физическая папка |
settings (строчные)
|
/lib/settings/
|
Namespace |
Settings (заглавная)
|
namespace ...\Settings
|
Автозагрузка | Точное совпадение с namespace |
'...\\Settings\\Class' => 'lib/settings/Class.php'
|
Рекомендация:
Следуйте этому правилу, чтобы избежать ошибок автозагрузки на Linux-серверах и сохранить код в едином стиле.