【问题标题】:Automatically inject dependency自动注入依赖
【发布时间】:2015-02-20 10:29:00
【问题描述】:

我不明白为什么 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\Application不能注入静态方法?
  • 已经尝试过使用非静态方法 - 一样
  • 你能添加你如何创建这些的例子吗?

标签: php symfony dependency-injection silex


【解决方案1】:

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

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

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

更多详情,请查看Silex controller resolver codeSymfony's HttpKernel one

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 2018-11-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多