php - 如何在一个类中访问 Laravel 单例?

标签 php laravel laravel-5 service-provider

我在这样的服务提供商中注册了一个单例:

$this->app->singleton(MyClass::class);

这通常可以通过简单地在参数中声明来访问,如下所示:

class FooController extends Controller
{
    public function index(MyClass $myClass)
    {
        //...
    }
}

但是我似乎无法在其他自定义类(即非 Controller 类)中访问此单例。 ( https://laravel.com/docs/5.2/container#resolving )

例如这里:

class Bar {
   private $myClass;
   private $a;
   private $b;

   public function __construct($a, $b) {
      $this->a = $a;
      $this->b = $b;
      $this->myClass = ... // TODO: get singleton
   }
}

我该怎么做?

请注意,我将创建 Bar 的多个实例。

最佳答案

在你的构造函数中类型提示类/接口(interface),在大多数情况下,Laravel 会自动解析并将它注入(inject)到你的类中。

参见 Service Provider documentation一些示例和替代方案。

以你的例子为例:

class Bar {
    private $myClass;

    public function __construct(MyClass $myClass) {
       $this->myClass = $myClass;
    }
}

如果 Bar::__construct 采用服务提供者无法预先定义的其他参数,您将不得不使用服务定位器:

/* $this->app is an instance of Illuminate\Foundation\Application */
$bar = new Bar($this->app->make(MyClass::class), /* other parameters */);

或者,将服务位置移动到它自己的构造函数中:

use  Illuminate\Support\Facades\App;

class Bar {
    private $myClass;

    public function __construct() {
       $this->myClass = App::make(MyClass::class);
    }
}

关于php - 如何在一个类中访问 Laravel 单例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35684830/

相关文章:

php - 每当我尝试请求本地主机 :8000/any using guzzle 时,Laravel 服务器就会挂起

php - 将参数传递给Laravel中的中间件

sql - 如何在 Laravel 中编写将两列组合作为单个查询的条件查询?

mysql - laravel5-如何隐藏withPivot的特定列?

php - 从 base64 编码的 src 字符串中获取图像类型

php - laravel包中路由声明的顺序

php - Laravel - 在两个表之间使用连接

php - ViewerJS 服务器拒绝连接

php - yii 模型-> 保存不适用于更新值

php - PDF 中的工具提示 : are they possible?