我这样运行控制器
$controller = $this->getContainer()->get($class);
$controller->{$method}(...array_values($vars));现在在控制器内部,如果我尝试自动连接模型,我需要使用模型,比如
class MyClass extends Controller
{
public function doSmth(myModel $myModel)
{
$myModel->getAll());
}
}我收到关于错误参数类型的错误信息。控制器方法不应该总是使用某个模型,因此需要在方法中实例化模型。
好的,然后我尝试直接实例化模型
class MyClass extends Controller
{
public function doSmth()
{
$myModel = new myModel();
$myModel->getAll());
}
}但我收到的问题是,我需要模型内容器的实例(例如,设置DB连接,以及在容器内注册这些设置)。我可以将容器实例从控制器传输到模型,如下所示:
class MyClass extends Controller
{
public function doSmth()
{
$myModel = new myModel($this->container);
$myModel->getAll());
}
}但每次我需要模型的时候我都得这么做,这太难看了……
我是php-di的新手。我知道当我在方法中实例化时,DI不会跟踪它……只是不知道该怎么设置?
发布于 2019-06-07 04:41:28
因为控制器有一个容器实例,只需通过容器调用模型并将其包装在某个方法中,如getModel($modelName)
class MyClass extends Controller
{
public function doSmth()
{
$myModel = $this->getModel('MyModel');
$myModel->getAll());
}
}get模型将会像这样:
class Controller
{
protected $c;
public function __construct(ContainerInterface $c)
{
$this->c = $c;
}
public function getModel(string $name)
{
return $this->c->get($name);
}
}https://stackoverflow.com/questions/56470379
复制相似问题