在 Laravel 5 中获取 App 命名空间

Get the App Namespace in Laravel 5

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

根据我的理解,Laravel 5 未在其任何核心 类

中提供应用程序的命名空间

所以我决定从 composer.json 文件

中获取这个命名空间
   "psr-4": {
        "AppNamespace\": "app/"
    }

或者要求用户在一种配置文件中提供应用程序的命名空间。

问题: 如果我对 Laravel 的假设不正确,请告诉我,如果它是正确的,请告诉我哪种方法是获得此 namespace 的最佳方法,或者如果您有任何更好的建议?

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

Illuminate\Console\AppNamespaceDetectorTrait

Laravel 在 AppNameCommand 中使用此特征在更新之前获取当前命名空间。

一个例子:

class MyClass {

    use \Illuminate\Console\AppNamespaceDetectorTrait;

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

}

您可以阅读有关特征的更多信息 here

检查这个,它可能对你有帮助https://www.php.net/manual/en/language.namespaces.nsconstants.php
您可以使用魔术关键字 __NAMESPACE__ 到其方法中任何 class 的命名空间。