Laravel服务容器-注册共享给所有服务的对象

时间:2019-04-13 09:09:51

标签: php laravel

我试图向容器中注册一个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 :(得分:0)

您需要将laravel Configuration (accessing-configuration-values) AppServiceProvider

一起使用

示例:

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

然后使用它,致电

config('theconfig.uuid');

程序中的任何地方

答案 1 :(得分:0)

这是Laravel 4中的吗?我以前没有看过App::instance标记,但是我在Laravel 4.2 docs for the IoC Container中找到了。

这看起来像是使用单例的情况。您可以使用它来确保conf仅解析一次。查看4.2文档,您可以如下定义单例。

App::singleton('conf', function()
{
    return Uuid::generate()->string;
});
相关问题