2017-08-26 10 views
0

私は私が正しくコンフィグコンポーネントを使用せずに私のコントローラのコンストラクタにサービスを転送することができますどのように理解していないCreate your own PHP FrameworkスタンドアロンのSymfony DIC

以下の私のプロジェクトでsymfonyのDIC、ルーティングとControllerResolverを使用していますかコントローラ内のコンテナを設定しますか? ルーティング:

$routes->add('mycontroller', new Routing\Route('/', ['_controller' => 'controller.mycontroller::indexAction'])); 

コントローラー:

class MyController implements ContainerAwareInterface 
    { 
     use ContainerAwareTrait; 

     protected $entityManager; 

     public function __construct(Doctrine $doctrine) 
     { 
      $this->entityManager = $doctrine->entityManager; 
     } 

     public function indexAction() 
     { 
      ... 
     } 
    } 

コンテナとハンドル:

$container = new DependencyInjection\ContainerBuilder(); 
$container->register('context', Routing\RequestContext::class); 
$container->register('matcher', Routing\Matcher\UrlMatcher::class) 
      ->setArguments([$routes, new Reference('context')]); 
$container->register('doctrine', Doctrine::class) 
      ->setArguments($db); 
... 
$container->register('controller.mycontroller',MyController::class) 
      ->setArguments([new Reference('doctrine')]); 

$request = Request::createFromGlobals(); 

/** 
* @var \Symfony\Component\HttpKernel\HttpKernel $kernel 
*/ 
$kernel = $container->get('base'); 
/** 
* @var \Symfony\Component\HttpFoundation\Response $response 
*/ 
$response = $kernel->handle($request); 

$response->send(); 
+0

通常、コントローラーは必要なものを注入するサービスとして定義されます。ルーティング中のある時点で、コントローラをコンテナから引き出します。 – Cerad

+0

@Cerad ルータがコンテナを使用すべきであると理解する方法を理解できません。コントローラをサービスとして定義し、サービス名をルータに渡すと、クラスが見つからず、エラーが返されます。 私はControllerResolverコードを見ていて、サービスにアクセスしていないようです。 – HouseInTheForest

+0

これはフレームワークの仕事、つまりあなたのコードです。コントローラリゾルバ自体はコンテナについて何も知らない。私が提案できるのは、実際のSymfonyフレームワークをインストールし、それがどのように動作するかを見てみることです。 – Cerad

答えて

関連する問題