0

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);

すべての助けに感謝し、私の下手な英語について申し訳ありません。

ありがとうございました。

4

0 に答える 0