如果我实现了一个注入了一些服务的类,我必须编写大量代码:
<?php
namespace Hn\AssetDbBundle\Services;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\TwigBundle\TwigEngine;
use Symfony\Component\HttpKernel\KernelInterface;
/**
* Class SomeNewService
* @package Hn\AssetDbBundle\Services
*/
class SomeNewService {
/**
* @var TwigEngine
*/
private $engine;
/**
* @var KernelInterface
*/
private $kernel;
/**
* @var LoggerInterface
*/
private $logger;
public function __construct(TwigEngine $engine, KernelInterface $kernel, LoggerInterface $logger) {
$this->engine = $engine;
$this->kernel = $kernel;
$this->logger = $logger;
}
}
这似乎是多余的。有没有办法可以减少我必须编写的代码量?是否有用于初始化字段的实时模板,或者我可以自动生成此块的大部分内容吗?
答案 0 :(得分:19)
您可以使用Initialize field
功能。
这样,你只需要用这种方式编写构造函数方法:
class SomeNewService {
public function __construct(TwigEngine $engine, KernelInterface $kernel, LoggerInterface $logger) {
}
}
然后您可以使用初始化字段。将光标放在构造函数的一个属性上,然后在MacOS上使用 Alt + Enter 。
它看起来像这样:
按Enter键后,您将面对一个属性列表,您可以通过 Shift 和箭头键选择这些属性。通过选择所有属性,您的代码将如下所示:
class SomeNewService {
/**
* @var TwigEngine
*/
private $engine;
/**
* @var KernelInterface
*/
private $kernel;
/**
* @var LoggerInterface
*/
private $logger;
/**
* @param TwigEngine $engine
* @param KernelInterface $kernel
* @param LoggerInterface $logger
*/
public function __construct(TwigEngine $engine, KernelInterface $kernel, LoggerInterface $logger) {
$this->engine = $engine;
$this->kernel = $kernel;
$this->logger = $logger;
}
}
答案 1 :(得分:2)
您也可以反过来,首先定义属性,然后在“生成”菜单(Cmd + N)中,使用“构造函数”。
答案 2 :(得分:0)
在 Windows 上: 将光标放在构造方法的论证上, 然后按 Alt + Enter ,悬停/选择初始化字段,然后按 Alt + Enter ,然后选择字段并按 Ok 。
享受