Инъекция зависимости от статики

Я изучаю фреймворк Symfony и мне интересно:
если мне нужно что-то вроде помощника (например), то лучше сделать сервис (сделать инъекцию зависимости в мой контроллер) или лучше создать статическую функцию.
Каковы плюсы и минусы каждого метода.

Заранее спасибо 🙂

1

Решение

Это очень важный вопрос, касающийся лучшего способа добавления многократно используемых библиотек, выполняющих очень специфические процессы.

Способ Symfony — сделать его сервисом и зарегистрировать его в контейнере сервиса.

<?php

namespace Acme\MainBundle\Services;

class MobileHelper
{
public function formatMobile($number)
{
$ddd = substr($number, 0, 2);
$prefix_end_index = strlen($number) == 11 ? 5 : 4;
$prefix = substr($number, 2, $prefix_end_index);
$suffix = substr($number, -4, 4);

return sprintf('(%s) %s-%s', $ddd, $prefix, $suffix);
}

public function unformatMobile($number)
{
$number = preg_replace('/[()-\s]/', '', $number);

return $number;
}
}

Потом на services.yml

  mobile.helper:
class: Acme\MainBundle\Services\MobileService

Затем вы можете использовать его в вашем контроллере, как:

$mobileHelper = $this->get('mobile.helper');
$formattedMobile = $mobileHelper->formatMobile('11999762020');
2

Другие решения

Статические функции в контроллерах не похожи на Symfony. Внедрение сервисов и зависимостей, как правило, является подходящим способом, так как он сразу отделяет функциональность от одного контроллера и делает его более удобным для повторного использования. Думаю, что этот метод, вероятно, также обострит вашу логику относительно того, как вы строите этот сервис. Лучшая практика Symfony — для легких контроллеров, поэтому любая тяжелая бизнес-логика должна быть перенесена в сервис.

1