我正在为Laravel 5开发一个包,需要知道应用程序命名空间,我该如何获得它?
我看到有Illuminate\Console\AppNamespaceDetectorTrait
,但它需要一些基础帮助程序以及应用程序容器的实例才能使它们正常工作,并且在开发过程中测试很棘手包裹。
编辑:目前我将该特征包装到界面中以创建隔离,但想知道是否有更好的解决方案。
答案 0 :(得分:1)
我不知道应该使用AppNamespaceDetectorTrait
的内容是什么。只需使用它并致电getAppNamespace()
:
class Foo {
use Illuminate\Console\AppNamespaceDetectorTrait;
public function bar(){
echo $this->getAppNamespace();
}
}
答案 1 :(得分:0)
尝试将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\