微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何启动具有依赖项的服务而不在方法参数中声明它?

如何解决如何启动具有依赖项的服务而不在方法参数中声明它?

美好的一天。 我想在控制器方法中运行一个名称来自参数的类。 类存在,继承了想要的接口,通过new完美创建。

public function indexAction ($class) {
    if (
        ! empty ($class)
        && class_exists ($class)
        && in_array (DirectPerformerInterface::class,class_implements ($class))
    ) {
        /** @var DirectPerformerInterface $obj */
        $obj = new $class;
        $response = $obj->run();
    }
}

一切正常。 但是在构造函数中,被启动的类可能有依赖关系。因此,对于 new,它们必须显式传递(并且类可能不同)或尝试以某种方式通过依赖项运行它。理论上,控制器应该已经受够了:

        /** @var DirectPerformerInterface $obj */
        $obj = $this->get($class);

但是,我有一个错误

Service "class name" not found: even though it exists in the app's container,the container inside "***\Controller\DirectPerformerController" is a smaller service locator that only kNows about the "doctrine","form.factory"," http_kernel "," parameter_bag "," request_stack "," router "," security.authorization_checker "," security.csrf.token_manager "," security.token_storage "," serializer "," session "," templating "and" twig " services. Try using dependency injection instead.

如果 $obj = $this->container->get($class); 相同 文档没有给出正确答案(可能是因为我无法提出正确的问题)。

请帮帮我

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。