Laravel命名空间错误:无法使用A作为A,因为该名称已在使用中?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (233)

我正面临一个问题,即我的控制器中的'use'语句会抛出

Cannot use App\Enums\Division as Division because the name is already in use

该部门的结构如下:

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有“使用App \ Division”,不要只与enum文件混淆。

有人建议我需要App \ Enums \ Division的别名,但我的EmployeeController没有抱怨,我不需要别名。其他人认为这是一个php问题 - 我在7.0.12。任何有关这方面的帮助将不胜感激!

提问于
用户回答回答于

如果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
{ ... }
用户回答回答于

为了避免多次使用相同的类“使用”,请将它们作为别名。假设App\Division是一个模型:

use App\Division as DivisionModel;

并相应地更新引用Division

扫码关注云+社区

领取腾讯云代金券