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的主要内容,如果未能解决你的问题,请参考以下文章

命名空间jquery

EF4 Poco 问题映射类型相同的名称相同的程序集不同的命名空间

Symfony2名称空间的文档

jQuery 命名空间的使用

具有相同命名空间的不同 Composer 包

更改 XML 节点属性值会导致“命名空间错误”