Выяснение пространства имен приложения Laravel 5 из пакета

Я разрабатываю пакет для Laravel 5 и мне нужно знать пространство имен приложения, как я могу его получить?

Я видел, что есть Illuminate\Console\AppNamespaceDetectorTrait но ему нужны некоторые помощники Foundation, а также экземпляр контейнера приложения, чтобы заставить их работать, и это сложно тестовое задание во время разработки пакета.

редактировать: пока я оборачиваю эту черту в интерфейс для создания изоляции, но задаюсь вопросом, есть ли лучшее решение.

0

Решение

Я не знаю, что не должно работать с AppNamespaceDetectorTrait, Просто используйте его и позвоните getAppNamespace():

class Foo {
use Illuminate\Console\AppNamespaceDetectorTrait;

public function bar(){
echo $this->getAppNamespace();
}
}
1

Другие решения

Попробуйте скопировать функцию 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\
0

По вопросам рекламы [email protected]