在Laravel 5项目中使用Enum类

时间:2015-07-06 21:03:10

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

我想在laravel 5 app中使用一些枚举类。 它们是在这个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以防万一。

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

2 个答案:

答案 0 :(得分:2)

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

  

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

您可以检查"psr-4": { "MyApp\\": "app/" } 文件中是否使用此标准,以确保:

psr-0

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

您拥有的其他选项是使用composer.json中的use SplEnum;标准添加您的应用,或者手动将Enum文件包含在您想要的任何位置。

<强> 更新

完成此操作后,您应该能够将namespace ..置于文件顶部的$rootScope.$apply(); 下,并且仅当您安装了SplTypes时才能使用SplEnum。如果你是在Windows上或者不想安装此PECL Extension,那么我建议这个答案:https://stackoverflow.com/a/254543/2433843并提供优雅的解决方案。

答案 1 :(得分:0)

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

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