首页 > 解决方案 > 从模型访问设置..容器不可用

问题描述

有没有办法访问容器,从而访问$appSlim 模型文件中的设置数组?看来这对控制器来说没问题,但是当我尝试访问时$this->container总是回来null

标签: phpcontainersslim

解决方案


你不能。应用程序本身未实例化的所有内容都不会被注入依赖项/无法访问容器。

但是,有一些方法可以解决您面临的问题。

在模型构造函数中使用参数

您可以简单地在构造函数中添加一个参数,该参数采用设置数组:

function __construct(array $settings){...}

然后在从控制器实例化时传递它。

请注意,容器不是服务定位器(参见PSR的 1.3 部分),因此您不应该直接传递容器。

使用包含设置数组的工厂

您可以创建一个将设置数组作为构造函数的工厂,然后将一个实例存储在您的容器中并将其添加为您的类的属性,这是对第一个答案的扩展,无需传递设置即可节省您的时间作为论据。

// The factory
class MyModelFactory{
    private array $settings;
    function __construct(array $settings){
        $this->settings = $settings;
    }

    public function makeInstance(): MyModel
    {
        return new MyModel($this->settings);
    }
}

// In the controller
class Controller{
    private MyModelFactory $myModelFactory;

    ...

    // In your route method
    $myModelInstance = $this->myModelFactory->makeInstance();
    ...
}

我没有包括如何将工厂放入容器以及如何使用它填充控制器类,因为这取决于您设置应用程序的方式,但这是整个过程中最简单的部分:)


推荐阅读