【问题标题】:Using Enum classes in Laravel 5 project在 Laravel 5 项目中使用枚举类
【发布时间】:2015-09-24 04:10:00
【问题描述】:

我想在我的 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 类?

【问题讨论】:

    标签: php enums namespaces laravel-5 psr-4


    【解决方案1】:

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

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

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

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

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

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

    更新

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

    【讨论】:

    • 我是 laravel 的新手。我想知道将每个文件放在自己的文件中是否是答案,但将它们放在一个文件中似乎更方便,因为它们只有几行。
    • 我把类放在它自己的文件中,现在我有一个不同的错误 - Class MyApp\SplEnum not found.
    • 它正在命名空间中寻找它。将其设为 \SplEnum 或将 use SplEnum 放在命名空间下的文件顶部
    • 可能是这样,但是我想也许我没有安装 spl_types stackoverflow.com/questions/6846395/… 这可能是问题所在?在 Windows 上运行 XAMPP。您能推荐另一种实现类似功能的方法吗?
    • 是的,你是对的,我认为 Windows 当前不支持它(即使该帖子已有 4 年历史;它仍然不是标准的)。不过,与其他语言中的 Enum 实现相比,SplEnum 类缺少功能。这个答案stackoverflow.com/a/254543/2433843 有两个非常好的选择。一个简单的,如果你的需求很简单。如果您需要验证,还有一个更详细的。例如,您可以将基本 Enum 放在 Helper 命名空间中。为不读 cmets 的人更新了答案。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-17
      • 1970-01-01
      • 2021-08-11
      • 2012-11-14
      • 2017-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多