在 Laravel 5 项目中使用枚举 类

Using Enum classes in Laravel 5 project

我想在我的 laravel 5 应用程序中使用一些枚举 classes。 它们是根据 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 语句:

use MyApp\Enums;

当我尝试像这样使用 class 时:

if ($category['Family'] == CategoryFamily::General)

我得到一个错误: Class 'MyApp\Http\Controllers\Quiz\CategoryFamily' 未找到

我有 运行 撰写转储自动加载以备不时之需。

如何从内部控制器(多个控制器)使用我的 Enum classes?

如果我错了请纠正我,但是 Laravel 使用 PSR-4 兼容的自动加载器。在 psr-4 的文档中提到:

The terminating class name corresponds to a file name ending in .php. The file name MUST match the case of the terminating class name.

您可以检查它是否在您的 composer.json 文件中使用此标准以确保:

"psr-4": {
    "MyApp\": "app/"
}

这意味着它将无法找到您的 class。我建议您将每个 class 放入一个与 class 同名的单独文件中,例如将其放入 MyApp\Enum 命名空间中。

您的其他选择是使用 psr-0 标准将您的应用程序包含在您的 composer.json 中,或者手动将您的 Enum 文件包含在您想要的任何位置。

更新

完成此操作后,如果且仅当您安装了 SplTypes 时,您应该能够通过将 use SplEnum; 放在文件顶部的 namespace .. 下来使用 SplEnum。如果您正在使用 Windows 或不想使用优雅的解决方案安装此 PECL Extension, then I suggest this answer: 。

我认为你必须导入枚举 class :

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