Те же пространства имен, которые используются двумя пакетами поставщиков: laravel и lumen.

В моем проекте Laravel и Lumen устанавливаются одним composer.json. Laravel для веб-проекта, Lumen для API, оба из которых являются частью одного и того же «проекта».

Итак, в папке vendor у меня есть следующие файлы:

поставщик / laravel / framework / src / Illuminate / Foundation / Support / Providers / EventServiceProvider.php

а также

поставщик / laravel / lumen-framework / src / Foundation / Support / Providers / EventServiceProvider.php

Теперь оба они используют одно и то же пространство имен:

Освещение \ Фонд \ Поддержка \ Провайдеры \ EventServiceProvider

На одном из наших занятий я делаю:

use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;

Проблема в том, что оба пакета в папке vendor используют это пространство имен, но файлы и методы в файлах разные.

Есть ли способ явно указать, какую версию пространства имен мы используем? Или добавить к одному из них псевдоним?

Очевидно, я не могу изменить пакеты, потому что «обновление композитора» переопределит их.

Любые идеи приветствуются. Спасибо


person BIOSTALL    schedule 04.08.2015    source источник
comment
Команда use относится к файлу, в котором она отображается, поэтому я не уверен, что могу понять, в чем проблема. Вы можете объяснить, как проявляется эта проблема - вы получаете ошибку? Когда вы говорите это пространство имен, вы имеете в виду Illuminate\Foundation\Support\Providers\EventServiceProvider? Если так, только один пакет будет использовать это - это точка пространств имен.   -  person halfer    schedule 04.08.2015
comment
Не уверен, что понимаю. Вы хотите сказать, что в папках Laravel и Lumen есть класс Illuminate \ Foundation \ Support \ Providers \ EventServiceProvider?   -  person jedrzej.kurylo    schedule 04.08.2015
comment
Я добавил ясности в вопрос   -  person BIOSTALL    schedule 05.08.2015
comment
Есть ли причина, по которой вы используете Laravel и Lumen в одном приложении?   -  person lxg    schedule 09.08.2015
comment
Я не вижу проблемы.   -  person dlporter98    schedule 09.08.2015


Ответы (1)


Есть два разных пространства имен (а не одно), содержащие два класса с одинаковым именем. Просто используйте два аллиаса:

use Illuminate/Foundation/Support/Providers/EventServiceProvider as IlluminateEventServiceProvider;
use Foundation/Support/Providers/EventServiceProvider as LumenEventServiceProvider;

Отсюда вы сможете без двусмысленности называть оба класса.

person dlporter98    schedule 09.08.2015
comment
Извините, но это не помогает. Вы изобретаете собственное пространство имен в коде, который вы предоставили (второй). - person BIOSTALL; 09.08.2015
comment
Шаблон, который я использовал выше, обычно является способом построения пространств имен. После поиска по кодовой базе laravel на github я понял, что вы имеете в виду. Это недосмотр со стороны. Пространства имен должны быть такими, как я описал выше. - person dlporter98; 09.08.2015
comment
Верный. Связался с создателями Laravel и Lumen, и они сказали, что их нельзя использовать бок о бок. Спасибо хоть. - person BIOSTALL; 09.08.2015