1

我想在我的 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 语句:

use MyApp\Enums;

当我尝试使用这样的类时:

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

我收到一个错误:找不到类“MyApp\Http\Controllers\Quiz\CategoryFamily”

我已经运行了 compose dump-autoload 以防万一。

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

4

2 回答 2

2

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

终止类名对应于以 .php 结尾的文件名。文件名必须与终止类名的大小写匹配。

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

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

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

您拥有的其他选项是使用psr-0标准将您的应用程序composer.json包含在您的 .

更新

完成此操作后,当且仅当您安装了 SplTypes 时,您应该能够通过将文件放在文件顶部来使用 SplEnum use SplEnum;namespace ..如果您使用的是 Windows 或不想安装此PECL Extension,那么我建议您使用以下答案:https ://stackoverflow.com/a/254543/2433843以及优雅的解决方案。

于 2015-07-06T21:41:35.697 回答
1

我认为您必须导入枚举类:

namespace MyApp\Enums;
use SplEnum; // specify correct path if needed
于 2015-07-07T01:36:10.187 回答