Ошибка пространства имен Laravel: невозможно использовать A в качестве A, поскольку имя уже используется - PullRequest
0 голосов
/ 19 сентября 2018

Я столкнулся с проблемой, когда оператор 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», не путать ее с файлом enum.

Некоторые предположили, что мне нужен псевдонимдля App \ Enums \ Division, но мой EmployeeController не жаловался, и мне не понадобился псевдоним.Другие предполагают, что это проблема php - я на 7.0.12.Любая помощь с этим будет принята с благодарностью!

Ответы [ 4 ]

0 голосов
/ 17 марта 2019

Я столкнулся с той же проблемой.Я решил проблему.Я использовал одно и то же название модели дважды.Итак, я удалил одно название модели, и проблема решена.

0 голосов
/ 19 сентября 2018

Трудно быть уверенным без полного кода (я обновлю или удалю его, если к вопросу будут добавлены лучшие примеры), но вполне вероятно, что ваш файл содержит оба:

use App\Division;

и:

use App\Enum\Division;

Они оба используют неявный псевдоним as Division, поэтому PHP жалуется, что когда он видит слово Division, он не знает, какой псевдоним подразумевается.

Исправление заключается в добавлении предложения as к одной или обеим строкам, чтобы дать им некоторый другой псевдоним, который не является двусмысленным.

0 голосов
/ 19 сентября 2018

Если класс Enum находится в пространстве имен App \ Enums, как и Division, то вам не нужно указывать использование App \ Enums в PHP-файле Division.Однако в классе контроллера необходимо указать правильные пути к классам 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
{ ... }
0 голосов
/ 19 сентября 2018

Чтобы не использовать один и тот же класс несколько раз, присвойте им псевдоним.Предполагая, что App\Division является моделью:

use App\Division as DivisionModel;

И обновите ссылки на Division соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...