2 个供应商软件包使用相同的命名空间:laravel 和 lumen
Posted
技术标签:
【中文标题】2 个供应商软件包使用相同的命名空间:laravel 和 lumen【英文标题】:Same namespaces used by 2 vendor packages: laravel and lumen 【发布时间】:2015-10-27 03:56:04 【问题描述】:在我的项目中,我们通过一个 composer.json 安装了 Laravel 和 Lumen。 Laravel 用于 Web 项目,Lumen 用于 API,两者都是同一个“项目”的一部分。
所以在“供应商”文件夹中,我有以下文件:
vendor/laravel/framework/src/Illuminate/Foundation/Support/Providers/EventServiceProvider.php
和
vendor/laravel/lumen-framework/src/Foundation/Support/Providers/EventServiceProvider.php
现在它们都使用相同的命名空间:
Illuminate\Foundation\Support\Providers\EventServiceProvider
在我们的一门课上:
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
问题是'vendor'文件夹中的两个包都使用这个命名空间,但是文件中的文件和方法不同。
是否有明确指定我们使用哪个版本的命名空间?或者为其中一个添加别名?
显然我无法更改软件包,因为“composer update”会覆盖它们。
欢迎任何想法。谢谢
【问题讨论】:
use
命令特定于它出现的文件,所以我不确定我能看出问题所在。你能解释一下这个问题是如何表现出来的——你有没有得到错误?当你说“这个命名空间”时,你是指Illuminate\Foundation\Support\Providers\EventServiceProvider
吗?如果是这样,只有一个包会使用它——这就是命名空间的意义所在。
不确定我是否理解。你是说 Laravel 和 Lumen 文件夹中都有一个类“Illuminate\Foundation\Support\Providers\EventServiceProvider”?
我的问题更清楚了
你在同一个应用程序中使用 Laravel 和 Lumen 有什么原因吗?
我没有发现问题。
【参考方案1】:
有两个不同的命名空间(不是一个)包含两个同名的类。只需使用两个别名:
use Illuminate/Foundation/Support/Providers/EventServiceProvider as IlluminateEventServiceProvider;
use Foundation/Support/Providers/EventServiceProvider as LumenEventServiceProvider;
从这里您将能够毫无歧义地调用这两个类。
【讨论】:
很抱歉,但这无济于事。您在提供的代码(第二个)中发明了自己的命名空间。 我上面使用的模式通常是命名空间的构造方式。在 github 上搜索 laravel 代码库后,我明白了你的意思。这是那里的疏忽。命名空间应该和我上面描述的一样。 正确。与 Laravel 和 Lumen 的创建者取得了联系,他们说不可能并排使用它们。不过还是谢谢。以上是关于2 个供应商软件包使用相同的命名空间:laravel 和 lumen的主要内容,如果未能解决你的问题,请参考以下文章