我无法理解为什么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对象是自动注入的,而第二个例子中没有?
答案 0 :(得分:4)
控制器(仅限控制器)中的Silex does parameter conversion,因此在控制器方法中,您可以键入提示并期望“自动”拥有实例,但不能在其他任何地方使用。来自official docs:
您可以(在控制器方法中)使用Request和Silex \ Application类型提示来获取$ request和$ app注入。
注意:强调我的,从上下文中提取,所以我更好地说清楚。
有关详细信息,请查看Silex controller resolver code以及Symfony's HttpKernel one。