自动注入依赖

时间:2015-02-20 10:29:00

标签: php symfony dependency-injection silex

我无法理解为什么Silex \ Application对象是在某些类中注入的,而在其他类中则不是。这是一个例子

示例1

/
 Controllers
   Admin
     LoginController.php


namespace SD\Controllers\Admin;

use Silex\Application;

class LoginController
{
  public function loginAction(\Silex\Application $app)
  {
     //in this method Application object is injected automatically
  }
}

示例2

/
 Lib
  RoutesFactory.php

namespace SD\Lib;

use Silex\Application;

class RoutesFactory
{
  public static function make(\Silex\Application $app)
  {
    // in this method Application object is not injected automatically and I get an error saying the object passed to method make is none instead of \Silex\Apllication
  }
}

那么为什么第一个例子中的Application对象是自动注入的,而第二个例子中没有?

1 个答案:

答案 0 :(得分:4)

控制器(仅限控制器)中的Silex does parameter conversion,因此在控制器方法中,您可以键入提示并期望“自动”拥有实例,但不能在其他任何地方使用。来自official docs

  

您可以(在控制器方法中)使用Request和Silex \ Application类型提示来获取$ request和$ app注入。

注意:强调我的,从上下文中提取,所以我更好地说清楚。

有关详细信息,请查看Silex controller resolver code以及Symfony's HttpKernel one