获取Laravel 5中的应用程序命名空间

6

我正在开发一个Laravel 5的包,但是如果用户通过命令php artisan app:name Test更改了应用程序的默认命名空间,则该包将无法正常工作。该包需要知道App的命名空间才能正常工作。

据我所知,Laravel 5没有在其核心类中提供应用程序的命名空间。

因此,我决定从composer.json文件中获取此命名空间。

   "psr-4": {
        "AppNamespace\\": "app/"
    }

或者要求用户在一种配置文件中提供应用程序的命名空间。
问题: 请告诉我,如果我对Laravel不能提供这个的推测是正确的,并且如果它是正确的,请让我知道获取这个“namespace”的最佳方式是什么,或者如果你有更好的建议,也可以提出?

你的程序包不应该依赖于应用程序的命名空间。你确切地需要知道它的原因是什么? - lukasgeiter
@lukasgeiter 它在主应用程序中创建一些类,例如控制器,为了以后引用该控制器,我们需要有应用程序的命名空间,例如:App\Http\Controllers\PackageController,你有更好的建议吗? - Siavosh
在我的情况下,该软件包想要与现有的用户模型进行交互,这确实需要应用程序命名空间。下面的答案(trait)非常有帮助:D - David Craig
2个回答

5

您可以使用 Laravel 核心包中包含的以下特性来获取应用程序的命名空间:

Illuminate\Console\AppNamespaceDetectorTrait

Laravel使用这个trait来获取更新之前的当前命名空间,该trait在AppNameCommand中使用。

举例:

class MyClass {

    use \Illuminate\Console\AppNamespaceDetectorTrait;

    public function getNamespace()
    {
        return $this->getAppNamespace();
    }

}

关于traits的更多信息可以在这里阅读。


请提供一个例子。 - Siavosh
MyClass 不必继承自任何类? - Siavosh
以上只是一个简单的例子。您应该将 trait 导入到您想要获取命名空间的类中。 - Pantelis Peslis
жҲ‘зңӢеҲ°иҝҷжҳҜдёҖдёӘдҫӢеӯҗпјҢжҲ‘зҡ„ж„ҸжҖқжҳҜд»»дҪ•зұ»йғҪеҸҜд»Ҙи°ғз”ЁеҮҪж•°getAppNamespace()еҗ—пјҹиҝҳжҳҜ MyClass еҝ…须继жүҝиҮӘзү№е®ҡзҡ„зұ»пјҹ - Siavosh
2
不需要扩展类。当你导入一个trait时,你可以调用trait内的任何方法。 - Pantelis Peslis
如果我有多个 traits 和扩展类,你的 $this->getAppNamespace(); 将无法工作。 - ujwal dhakal

0

链接没问题,但会随时间过期,请在此添加上下文,说明如何与问题的 OP 相关使用它。(来自审核) - ZF007

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接