Silex 控制器依赖注入

Tob*_*ias 1 php api rest dependency-injection silex

我正在尝试将依赖项注入我的 Silex 控制器,因为我的控制器中需要一个 user 类型的对象并用它处理一些东西。

$app->mount("/users", new \MyApp\Controller\Provider\User($user));
Run Code Online (Sandbox Code Playgroud)

我通过实现 ControllerProviderInterface 来实现控制器:

class User implements ControllerProviderInterface{
    protected $user;

    public function __construct($user){
        //...
    }

    public function connect(Application $app)
    {
        //...
    }
}
Run Code Online (Sandbox Code Playgroud)

路由和方法都在控制器中设置。没有依赖注入一切正常。但是只要我编辑代码并添加注入,我就会收到以下错误:

缺少 ...::__construct() 的参数 1

当我创建对象时,我将该参数发送给它,但不知何故 Silex 之前使用构造函数创建了一个实例,而没有传递任何参数。

Jas*_*ers 6

另一种方法是使用 aServiceController而不是 a ControllerProvider。您可以通过这种方式实现更熟悉的依赖注入。

$app->register(new Silex\Provider\ServiceControllerServiceProvider());

$app["user"] = function () {
    return new User();
};
$app["user.controller"] = function () use ($app) {
    return new UserController($app["user"]);
};

$app->get("/users/{id}", "user.controller:get");
Run Code Online (Sandbox Code Playgroud)

...

class User implements UserInterface
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

...

class UserController
{
    protected $user;

    public function __construct(UserInterface $user)
    {
        $this->user = $user;
    }

    public function get(Request $request, $id)
    {
        $this->user;

        // Do stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

参考:http : //silex.sensiolabs.org/doc/providers/service_controller.html