Я хочу использовать некоторые классы enum в моем приложении laravel 5. Они смоделированы после этого примера справочной страницы PHP: http://php.net/manual/en/class.splenum.php
Файл app\Enums.php выглядит так:
<?php
namespace MyApp\Enums;
class ItemStates extends SplEnum
{
const __default = self::Active;
const Active = 1;
const Pending = 2;
}
class ItemVisibility extends SplEnum
{
const __default = self::Community;
const Community = 1;
const Personal = 2;
}
Я хочу использовать их с контроллера. Я поставил оператор использования в верхней части моего контроллера:
use MyApp\Enums;
Когда я пытаюсь использовать класс следующим образом:
if ($category['Family'] == CategoryFamily::General)
Я получаю сообщение об ошибке: Class 'MyApp\Http\Controllers\Quiz\CategoryFamily' не найден
Я запустил компоновку автозагрузки дампа, если это имеет значение.
Как я могу использовать классы Enum из внутренних контроллеров (несколько контроллеров)?
Пожалуйста, исправьте меня, если я ошибаюсь, но Laravel использует автозагрузчик, совместимый с PSR-4. В документации psr-4 упоминается:
Конечное имя класса соответствует имени файла, заканчивающегося на.php. Имя файла ДОЛЖНО соответствовать случаю завершающего имени класса.
Вы можете проверить, использует ли он этот стандарт в файле composer.json
чтобы убедиться:
"psr-4": {
"MyApp\\": "app/"
}
Это означает, что он не сможет найти ваш класс. Я предлагаю вам поместить каждый класс в отдельный файл с тем же именем, что и класс, и поместить его в пространство имен MyApp\Enum, например.
Другие параметры, которые у вас есть, - это включить ваше приложение, используя стандарт psr-0
в вашем composer.json
, или вручную включить свой файл Enum везде, где вы этого хотите.
ОБНОВИТЬ
Как только вы это сделаете, вы сможете использовать SplEnum, use SplEnum;
под namespace..
в верхней части вашего файла, если и только когда у вас установлен SplTypes. Если вы находитесь в Windows или не хотите устанавливать это расширение PECL, я предлагаю этот ответ: qaru.site/questions/11271/... с элегантным решением.
Я думаю, вам нужно импортировать класс enum:
namespace MyApp\Enums;
use SplEnum; // specify correct path if needed