我需要在实现AbstractControllerInterface的控制器中调用“ Utils” Class方法中的按值使用服务。
我的项目中有一个具有某些映射的实体。 其中一些具有实用程序类。 其中一些实现了myInterface。
我有一个循环来检查这些映射字段中的每个映射字段,获取每个正确的utils类名称,检查其存在以及myInterface的实现。
在这种情况下,我想实例化该类(或将它们用作服务)并调用我的方法。
每个Util类可以具有不同的构造函数参数,而自动装配可以提供帮助。
我不能传递容器并使用容器的get方法,因为AbstractControllerInterface实现,并且不能仅仅使“新的$ myClassName”,因为我不知道每个Utils类中的每个构造定义如何。
我的服务定义:
App\Utils\MyUtilsClass:
class: App\Utils\MyUtils
public: true
arguments:
- '@doctrine.orm.entity_manager'
- '@App\Helper\MyHelper'
我的代码的一部分:
# src\Utils\MyUtilsClass.php
namespace App\Utils
use Doctrine\ORM\EntityManagerInterface;
class MyUtilsClass{
protected $em;
public function __construct(EntityManagerInterface $em)
{
$this->em = $em;
}
# $name = 'App\\Utils\\MyOtherUtilsClass'
public function myMethod($name)
{
$containerBuilder = new ContainerBuilder();
$fileLocator = new FileLocator(__DIR__ . '/../../config');
$loader = new YamlFileLoader($containerBuilder, $fileLocator);
$loader->load('services.yaml');
$containerBuilder->compile();
$utils = $containerBuilder->get($name);
这使我“在编译容器时,服务或别名已被删除或内联。您应该将其公开,或者直接停止使用容器,而使用依赖项注入。”
编辑:尝试将其公开,会在我的容器中引发不存在的服务异常witdDoctrine \ ORM \ EntityManagerInterface
public function myMethod($name)
{
....
$containerBuilder->getDefinition($claseUtils)->setPublic(true);
$utils = $containerBuilder->get($name);
感谢所有帮助,并为我的英语不好而感到抱歉。
谢谢。