Laravel名称空间错误:不能将A用作A,因为该名称已被使用

时间:2018-09-19 12:36:03

标签: php laravel-5

我遇到一个问题,就是控制器中的“ 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上。任何帮助,将不胜感激!

4 个答案:

答案 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)

我也遇到过同样的问题。我已经解决了这个问题。我曾两次使用相同的型号名称。因此,我删除了一个型号名称,此问题已解决。