コントローラーでコンテナーを使用する
get()
コンテナーにアクセスするためにSymfony の基本コントローラー クラスによって提供されるショートカット関数にすぎません。
この関数を使用するには、コントローラーがこのクラスを拡張する必要があります。
namespace Acme\ExampleBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class DefaultController extends Controller
{
// your actions
}
(何らかの理由で) このクラスに依存したくない場合は、拡張 してコンテナーを挿入し、ショートカットContainerAware
のように使用できます。get()
namespace Acme\ExampleBundle\Controller;
use Symfony\Component\DependencyInjection\ContainerAware;
class DefaultController extends ContainerAware
{
public function exampleAction()
{
$myService = $this->container->get('my_service');
// do something
}
}
自分でコントローラーを作成する
コントローラーはデフォルトではサービスとして定義されていません。定義できますが、コンテナーを取得する必要はありません。要求が行われると、ルーティング フレームワークは、呼び出す必要があるコントローラーを決定します。次に、コントローラーが構築され、コンテナーがsetContainer()
メソッドを介して注入されます。
ただし、(テストまたはその他の場所で) 独自にコントローラーを作成する場合は、独自にコンテナーを挿入する必要があります。
$controller = new DefaultController();
$controller->setContainer($container);
// $container comes trough DI or anything else.