AbstractControllerInterface を実装するコントローラーから呼び出される「Utils」クラス メソッドで、値によってサービスを使用する必要があります。
私のプロジェクトには、いくつかのマッピングを持つエンティティがあります。それらのいくつかは Utils クラスを持っています。それらのいくつかは myInterface を実装しています。
これらのマッピング フィールドをすべてチェックし、それぞれの正しい utils クラス名を取得し、その存在と myInterface の実装をチェックするループがあります。
その場合、そのクラスをインスタンス化 (またはサービスとして使用) し、メソッドを呼び出します。
すべての Util クラスは異なるコンストラクター パラメーターを持つことができ、Autowiring が役立つと思います。
AbstractControllerInterface 実装のため、コンテナーを渡してコンテナー get メソッドを使用することはできません。各 Utils クラスのすべての構成定義がどのようになるかがわからないため、「新しい $myClassName」を作成することはできません。
私のサービス定義:
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);
すべての助けに感謝し、私の下手な英語について申し訳ありません。
ありがとうございました。