php - 从模型访问设置..容器不可用
问题描述
有没有办法访问容器,从而访问$app
Slim 模型文件中的设置数组?看来这对控制器来说没问题,但是当我尝试访问时$this->container
总是回来null
。
解决方案
你不能。应用程序本身未实例化的所有内容都不会被注入依赖项/无法访问容器。
但是,有一些方法可以解决您面临的问题。
在模型构造函数中使用参数
您可以简单地在构造函数中添加一个参数,该参数采用设置数组:
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();
...
}
我没有包括如何将工厂放入容器以及如何使用它填充控制器类,因为这取决于您设置应用程序的方式,但这是整个过程中最简单的部分:)
推荐阅读
- forms - Symfony4 形成 DateTimeType 字段顺序
- php - 扩展具有特征的类
- android - 如何在我的 Android 应用中使用 django 身份验证(django.contrib.auth)
- javascript - C#提交http post请求以填写表单
- javascript - 在 JQuery dataTable 中按列搜索给出“227200:101 Uncaught TypeError: otable.api().columns is not a function”错误
- javascript - heroku node.js 错误
- python - 为产品子图创建一个类
- java - 不带参数的反向队列
- php - LDAP 连接与 PHP 问题
- node.js - 节点mongo批量更新,获取更新的列名