4

コントローラーの外で getDoctrine() を実行しようとしています。私はこのサービスを作成しました:

config/services.yml

services:
  update_command:
    class: project\projBundle\Command\Update
    arguments: ['@doctrine.orm.entity_manager']

そして私の app/config/config.yml で

imports:
    - { resource: "@projectprojBundle/Resources/config/services.yml" }

だから、私が使いたいクラス:

namespace project\projBundle\Command;
use Doctrine\ORM\EntityManager;

class Update {
    protected $em;
    public function __construct(EntityManager $em) {
        $this->em = $em;
    }

しかし、私はこれをしたいたびに: (私はこれを正しくやっていますか? )

$up = new Update();

私はこのエラーを受け取りました:

Catchable Fatal Error: Argument 1 passed to ...\Update::__construct() must be an instance of Doctrine\ORM\EntityManager, none given, called in .../Update.php line 7  
4

3 に答える 3

2

サービスが自動的に注入されるようにするには、新しく作成した@update_commandサービスを注入するか、コンテナーから取得する必要があり@doctrine.orm.entity_managerます。

サービスではなく、引数なしでオブジェクトを作成しているだけです。Update はエンティティ マネージャー インスタンスを取得することを想定していますが、提供していません。

$up = new Update();

コントローラーのようなContainerAwareクラスでは、次のようにサービスを取得します。

 $up = $this->container->get('update_command');

それ以外の場合は、を使用するクラスをサービスに変換し、サービス自体のエンティティ マネージャーで行ったようにupdate_command注入します。@update_command

于 2013-11-08T09:30:53.007 に答える
0

app/config/config.yml の以下のコードを削除すると、services.yml が自動ロードされます...

imports:
    - { resource: "@projectprojBundle/Resources/config/services.yml" }

Action new a instance では、次のことができます。

  $up = $this->get('update_command');
于 2013-11-08T09:30:11.910 に答える