Если я реализую класс, который получает некоторые сервисы, я должен написать эту основную часть кода:
<?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 .
Это выглядит примерно так:
После нажатия кнопки ввода вы сталкиваетесь со списком свойств, который вы можете выбрать с помощью клавиш 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; } }
Вы также можете сделать наоборот, сначала определяя свойства, а затем в меню «Создать» (Cmd + N) используйте «Конструктор».