Сервисный контейнер Laravel - регистрация общего объекта для всех сервисов - PullRequest
0 голосов
/ 13 апреля 2019

Я пытался зарегистрировать в контейнере Uuid и несколько раз пытался извлечь его из контроллера маршрута, но значение uuid зарегистрировано не первым.

Может кто-нибудь помочь мне понять?

class AppServiceProvider extends ServiceProvider 
{
    public function boot()
    {   
        if(App::bound('conf')==NULL)
            App::instance('conf', Uuid::generate()->string);
    }
}

class InstanceController extends Controller
{
    public function getUuid()
    {
        return App::make('conf');
    }   
}

Мне нужно зарегистрировать уникальное значение или объект, который будет доступен для всех.

Я также пытался ввести этот код:

config(['uuid' => Uuid::generate()->string]);

в методе дескриптора команды Laravel:

class RegisteredInstances extends Command
{
    public function handle()
    {
        config(['uuid' => Uuid::generate()->string]);
    }
}

и выполните его, но когда я пытаюсь извлечь uuid из службы, ответ равен нулю.

Теперь я зарегистрировал команду laravel, котораясделайте это:

class RegisteredInstances extends Command
{
    .
    .
    .
    public function handle()
    {
        if(App::bound('conf')==NULL)
            App::instance('conf', Uuid::generate()->string);

        if(config('uuid2')==NULL)
            config(['uuid2' => Uuid::generate()->string]);
    }
}

Задача каждую минуту выполняет эту команду, и я пытаюсь извлечь uuid из сервисного контроллера следующим образом:

class InstanceController extends Controller
{
    public function getUuid()
    {
        return App::make('conf');
    }

    public function getUuid()
    {
        return config('uuid2');
    }     
}

Проблема в этом случае заключается в том, чточто контроллер возвращает NULL:

Ответы [ 2 ]

0 голосов
/ 13 апреля 2019

Это в Laravel 4? Я не видел разметки App::instance раньше, но нашел ее в документах Laravel 4.2 для контейнера IoC .

Это похоже на случай использования синглтона. Вы можете использовать это, чтобы убедиться, что conf разрешается только один раз. Глядя на 4.2 документа, вы можете определить свой синглтон следующим образом.

App::singleton('conf', function()
{
    return Uuid::generate()->string;
});
0 голосов
/ 13 апреля 2019

Вам необходимо использовать laravel Конфигурация (доступ к значениям конфигурации) с AppServiceProvider

Пример:

class AppServiceProvider extends ServiceProvider
{
   public function boot()
   { 
       config([ 'theconfig.uuid' => $class_here->UUID ]);
   }
}

Затем, чтобы использовать его, позвоните

config('theconfig.uuid');

в любом месте программы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...