自动注入依赖项


Automatically inject dependency

我不明白为什么在某些类中注入了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对象是自动注入的,而第二个例子中不是?

Silex在控制器中(仅在控制器中)进行参数转换,因此在控制器方法中,您可以键入hint并期望"自动"拥有实例,但不能在其他任何地方。来自官方文件:

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

注意:强调我的,它是从上下文中提取的,所以我想最好把它说清楚。

有关更多详细信息,请查看Silex控制器解析程序代码以及Symfony的HttpKernel代码。