使用在控制器
get()
容器是僅由Symfony base Controller class提供訪問容器的快捷方式功能。
你的控制器必須擴展這個類來使用此功能:
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.
從版本2.8開始不推薦使用,要在3.0中刪除。改爲使用ContainerAwareTrait。 – jan
@jan你可以看到答案是多大?你可以看到這是一個社區維基條目?去和更新編輯該答案,而不是嘲笑它的棄用... –