我想在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以防万一。
如何从控制器内部使用我的枚举类(多个控制器)?
答案 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