我遇到一个问题,就是控制器中的“ use”语句会抛出
Cannot use App\Enums\Division as Division because the name is already in use
Division枚举的结构如下:
namespace App\Enums;
use App\Enums;
class Division extends Enum
{
...
}
该枚举在模型中的使用方式如下:
namespace App;
use Carbon\Carbon;
use App\Enums\Division;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Employee extends Model
{
...
}
引发此异常的控制器具有以下结构:
namespace App\Http\Controllers;
use Carbon\Carbon;
use App\Employee;
use App\Division;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class AttendanceController extends Controller
{
...
}
EmployeeController具有相同的结构,但没有引发任何名称空间冲突错误
namespace App\Http\Controllers;
use Carbon\Carbon;
use App\Employee;
use Illuminate\Http\Request;
use App\Enums\Month;
use App\Division;
use Illuminate\Support\Facades\Auth;
class EmployeeController extends Controller
{
...
}
我不确定为什么这会引起问题,因为我对EmployeeController类使用了相同的结构,并且可以正常工作。 注意:我也有一个名为Division的模型,因此我的AttendanceController具有“ use App \ Division”功能,不要与枚举文件混淆。
有人建议我为App \ Enums \ Division需要一个别名,但是我的EmployeeController没有抱怨,也不需要别名。其他人认为这是一个php问题-我在7.0.12上。任何帮助,将不胜感激!
答案 0 :(得分:1)
为避免多次“使用”同一类,请为它们加上别名。假设App\Division
是模型:
use App\Division as DivisionModel;
并相应地更新对Division
的引用。
答案 1 :(得分:1)
如果Enum类在App \ Enums命名空间中,而Division也是如此,则无需在Division PHP文件中指定使用App \ Enums。但是,在控制器类中,您需要将Enum和Division类的正确路径指定为
// Division file
namespace App\Enums;
class Division extends Enum
{ ... }
// Controller File
namespace App\Http\Controllers;
use App\Enums\Division;
use App\Enums\Enum;
class AttendanceController extends Controller
{ ... }
答案 2 :(得分:0)
很难确定没有完整的代码(如果将更好的示例添加到问题中,我将更新或删除此代码),但是听起来您的文件很可能同时包含这两者:
use App\Division;
和:
use App\Enum\Division;
这些都使用隐式别名as Division
,因此PHP抱怨说,当看到单词Division
时,它不知道是哪个别名。
解决方法是在一个或两个行中添加一个as
子句,以便为它们提供一些其他的别名,而这些别名并不明确。
答案 3 :(得分:0)
我也遇到过同样的问题。我已经解决了这个问题。我曾两次使用相同的型号名称。因此,我删除了一个型号名称,此问题已解决。