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 之前使用构造函数创建了一个实例,而没有传递任何参数。
另一种方法是使用 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