Если я реализую класс, который получает некоторые сервисы, мне нужно написать большую часть кода:
<?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;
}
}
Это кажется излишним. Есть ли способ уменьшить количество кода, который я должен написать? Есть ли живой шаблон для инициализации полей или я могу автоматически сгенерировать большую часть этого блока?
Вы можете использовать Initialize field
особенность.
Таким образом, вам нужно только написать метод конструктора следующим образом:
class SomeNewService {
public function __construct(TwigEngine $engine, KernelInterface $kernel, LoggerInterface $logger) {
}
}
Затем вы можете использовать поля инициализации. Получить курсор над одним свойством конструктора, затем в MacOS использовать Alt + Войти.
Это выглядит примерно так:
После того, как вы нажмете Enter, вы увидите список свойств, которые вы можете выбрать сдвиг и клавиши со стрелками. Выбрав все свойства, ваш код будет выглядеть так:
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;
}
}
Вы также можете сделать наоборот, сначала определив свойства, а затем в меню «Создать» (Cmd + N) использовать «Конструктор».