我正在为Laravel 5开发一个包,需要知道应用程序名称空间,如何获得它?
我看到有Illuminate'Console'AppNamespaceDetectorTrait
,但它需要一些Foundation助手以及应用程序容器的实例来使它们工作,并且在包的开发过程中测试很困难。
编辑:目前我正在将该特性封装到一个接口中以创建隔离,但不知道是否有更好的解决方案。
我不知道什么应该不适用于AppNamespaceDetectorTrait
。只需使用它并调用getAppNamespace()
:
class Foo {
use Illuminate'Console'AppNamespaceDetectorTrait;
public function bar(){
echo $this->getAppNamespace();
}
}
尝试将getAppNamespace()函数复制到一个通用助手文件中,该文件可以在应用程序中的任何位置访问。然后,您不需要将AppNamespaceDetectorTrait特性与您的类绑定。
helpers.php
function getAppNamespace()
{
$composer = json_decode(file_get_contents(base_path().'/composer.json'), true);
foreach ((array) data_get($composer, 'autoload.psr-4') as $namespace => $path)
{
foreach ((array) $path as $pathChoice)
{
if (realpath(app_path()) == realpath(base_path().'/'.$pathChoice)) return $namespace;
}
}
throw new RuntimeException("Unable to detect application namespace.");
}
然后在YourClass.php中
$namespace = getAppNamespace(); // App'