2017-11-10 3 views
0

動作しない私は、コントローラのコンストラクタで(サービスおよびManagerRegistryの使用など)私の教義マネージャクラスを初期化する必要がありますが、symfonyはまだ、この例外がスローされます。教義マネージャークラスの注入は私のバンドルで

Type error: Too few arguments to function AdminBundle\Controller\RegistraceController::__construct(), 0 passed in C:\apache\htdocs\mujProjekt\vendor\symfony\symfony\src\Symfony\Component\HttpKernel\Controller\ControllerResolver.php on line 198 and exactly 1 expected

コントローラ:

namespace AdminBundle\Controller; 

use AdminBundle\Manager\AdminManager; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 

/** 
* Class DefaultController 
* @package AdminBundle\Controller 
* @Route("/registrace") 
*/ 
class RegistraceController extends Controller 
{ 
    /** 
    * @var AdminManager 
    */ 
    private $manager; 

    public function __construct(AdminManager $manager) 
    { 
     $this->manager = $manager; 
    } 

    ... 

Adminマネージャー:

namespace AdminBundle\Manager; 

use AdminBundle\Entity\Uzivatel; 
use Doctrine\Common\Persistence\ManagerRegistry; 

class AdminManager 
{ 
    private $em; 

    public function __construct(ManagerRegistry $Doctrine) 
    { 
     $this->em = $Doctrine->getManager('default'); 
    } 

... 

AdminBundle \ Resour ces \ config \ services.yml:

services: 
# admin.example: 
#  class: AdminBundle\Example 
#  arguments: ["@service_id", "plain_value", "%parameter%"] 
    admin.admin_manager: 
     class: AdminBundle\Manager\AdminManager 
     arguments: 
      ["@doctrine"] 

私はキャッシュをクリアしようとしましたが、成功しませんでした。 AdminBundleのservices.ymlはconfig.ymlに正しく含まれています。 config.ymlで

ORMの設定:

orm: 
    auto_generate_proxy_classes: '%kernel.debug%' 
    default_entity_manager: default 
    entity_managers: 
     default: 
      connection: default 
      mappings: 
       AdminBundle: ~ 

私はsymfonyの3.3とPHP 7.1を使用しています。

+0

あなたはS3.3を使用している+あなたが直接行動にあなたの管理サービスを注入を見てかかることがありますので:http://symfony.com/doc/current/controller.html#controller-accessing-servicesこれはまったく新しいものなので、古いチュートリアルに従えば混乱するのは簡単です。 – Cerad

+0

ご連絡ありがとうございます。それは私のコントローラで今すぐうまく機能する便利な機能です。 – AtT0mX

答えて

0

だから私はあなたのサービスのYMLはそのように見て必要だと思う:

services: 
    admin.admin_manager: 
     class: AdminBundle\Manager\AdminManager 
     arguments: ["@doctrine"] 
    admin.admin_controller: 
     class: AdminBundle\Controller\RegistraceController 
     arguments: ["@admin.admin_manager"] 

がここSymfony Service Container

を見上げては、それが役立つことを願っています!

挨拶:)

1

あなたのRegistraceControllerであなたのAdminマネージャーを注入したい場合は、サービスとしてRegistraceControllerを定義する必要があります。 https://symfony.com/doc/current/controller/service.htmlを見てください。 Symfonyのベースコントローラーを継承しないため、このアプローチにはいくつかの欠点があります。したがって、必要に応じて、ルータとテンプレートエンジンも注入する必要があります。しかし私はコントローラをサービスとして定義するのが好きです。依存関係が見えるときははるかにクリーンです。

これの代わりに、コントローラー内のSymfony ContainerをInversion Of Controll Containerとして使用し、$ this-> get( 'admin.admin_manager')でサービスを受けることができます。あなたの行動の内側から。

+0

ルーティングシステムにコンテナからコントローラを引き出すように指示するために必要な@Route(service = "admin.admin_manager")注釈付きルート定義のサービス引数に注意を向けることができます。 – Cerad

+0

あなたはあなたの@Route定義を間違って入力しました。 @Route(service = "name_of_controller_service")で、コントローラに実際に注入するサービスのサービス名ではありません。それとは別に、あなたは絶対に正しいです。 – marein

0

あなたの返信をありがとうございました。幸いにも、私はapp/config/services.ymlのサービスにこれを追加することで問題を解決しました。

AdminBundle\Controller\: 
    resource: '%kernel.project_dir%/src/AdminBundle/Controller' 
    public: true 
    tags: ['controller.service_arguments'] 
関連する問題