我对Symfony (version 4)还比较陌生,并试图实现用于依赖注入的__construct方法。
目前,我正在通过自己的实现(在我知道__construct方法之前)“注入”依赖关系,如下所示:
routes.yaml
fetch:
path: /fetch/{req}
controller: App\Controller\Fetch::init
requirements:
req: ".+"/fetch路由调用作为构造函数的init()方法。
控制器类
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use App\Services\Utilities; // a bunch of useful functions
class Fetch extends BaseController {
private $u;
public function init(Utilities $u) {
$this->u = $u; // set the $u member with an instance of $u
}
private function do_fetch(){
$this->u->prettyprint('hello service'); // use one of $u's methods
}
}如果你能容忍我的话,我在阅读医生们之前就想出了一个特别的方案,它几乎就是这样的细节(我得到了一个cookie)。
一个不同之处是,文档使用__construct()代替了我的init()方法。下面是上面链接的文档页面中的一个示例:
// src/Service/MessageGenerator.php
use Psr\Log\LoggerInterface;
class MessageGenerator
{
private $logger;
public function __construct(LoggerInterface $logger)
{
$this->logger = $logger;
}
public function getHappyMessage()
{
$this->logger->info('About to find a happy message!');
// ...
}
}但是,当我将init()替换为__construct()并更新routes.yaml时,我会得到一个错误。
// .....
class Fetch extends BaseController {
private $u;
public function __construct(Utilities $u) {
$this->u = $u; // set the $u member with an instance of $u
}
// ....
fetch:
path: /fetch/{req}
controller: App\Controller\Fetch::__construct
requirements:
req: ".+"

它要求我向__construct提供一个参数,因为该方法需要一个参数($u),但是当init()充当构造函数时,情况并非如此。
而且,我觉得由于__construct()方法是一个内置的钩子,Symfony应该知道如何使用它,而不必在routes.yaml中显式地告诉它。但是,排除它也会引发错误。
routes.yaml (__construct未明确表示)
fetch:
path: /fetch/{req}
controller: App\Controller\Fetch
requirements:
req: ".+"

我在这里错过了什么?
发布于 2018-06-04 22:06:29
https://stackoverflow.com/questions/50687197
复制相似问题