-3

DI を介してサービスにエンティティを挿入しようとしています。

Entity は、Doctrine-JSON-ODM-library ( https://github.com/dunglas/doctrine-json-odm )を介して、データベース (ユーザー要求から照会された) の JSON フィールドから作成されます。

私は通常、リクエストとリポジトリを使用して依存関係を返すコンテキストクラスを作成します(ここで説明されているようにhttps://blogs.cuttingedge.it/steven/posts/2015/code-smell-injecting-runtime-data-into -コンポーネント/ )。ただし、私の依存関係はツリー構造内の深くネストされたデータに依存しているため、これは実行可能ではないようです。

/* Doctrine-Entity queried from DB with User-Request-Parameters */
class Page
{
    /**
     * @var Slot[]
     * @ORM\Column(type="json_document", options={"jsonb": true})
     */
    private $slots = [];
}

/* First level of nesting */
class Slot
{
    /** @var Components[] */
    private $components;
}

/* Entity to be injected */
class Component
{
   // multiple data-fields
}

// Service which will need to work with the Component-Data
class ComponentRenderService
{
   // multiple functions which all need (read)-access to the
   // Component-data
}

深くネストされた構造を介して作成された依存関係を解決するにはどうすればよいですか?

4

1 に答える 1

-1

元の投稿に関する私のコメントに追加すると、エンティティをメソッド引数として渡すと、それをクラス変数として設定できます。

$service->method($entity)

class Service 
{

    private $entity;

    public function method($entity) // You call this somewhere
    {
       // If I understood you correctly, this is what you need
       $this->entity = $entity; // You set it as a class variable (same as DI does in constructor)

       // do stuff to $this->entity
    }


   public function otherMethod()
   {
      // you can access $this->entity here provided that you called `method` first
   }

}
于 2019-09-01T15:28:18.057 に答える