如何在 php-di 中注册 calss 以在实例化时自动调用某个方法



>我以这种方式运行控制器

$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());
    }
}

但是我收到问题,我需要模型内的容器实例(例如,设置数据库连接,并在容器内注册这些设置(。我可以像这样将容器实例从控制器转移到模型:

class MyClass extends Controller
{
    public function doSmth()
    {
           $myModel = new myModel($this->container);
           $myModel->getAll());
    }
}

但是每次我需要一些模型时我都必须这样做,这很丑陋......

我知道当我在方法 DI 中实例化时,DI 不会跟踪它......只是不知道如何完全设置它?

因为控制器有一个容器实例,只需要通过容器调用模型并将其包装在某个方法中,如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);
    }
}

相关内容

  • 没有找到相关文章

最新更新