Использование классов Enum в проекте Laravel 5

1

Я хочу использовать некоторые классы 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 из внутренних контроллеров (несколько контроллеров)?

Теги:
namespaces
enums
laravel-5
psr-4

2 ответа

3
Лучший ответ

Пожалуйста, исправьте меня, если я ошибаюсь, но 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/... с элегантным решением.

  • 0
    Я новичок в Laravel. Мне было интересно, если ответом будет поместить каждый файл в отдельный файл, но мне кажется, что было бы удобнее хранить их в одном файле, так как каждая из них состоит из нескольких строк.
  • 0
    Дайте нам знать, если это сработало. :)
Показать ещё 4 комментария
0

Я думаю, вам нужно импортировать класс enum:

namespace MyApp\Enums;
use SplEnum; // specify correct path if needed

Ещё вопросы

Сообщество Overcoder
Наверх
Меню