Я изучаю фреймворк Symfony и мне интересно:
если мне нужно что-то вроде помощника (например), то лучше сделать сервис (сделать инъекцию зависимости в мой контроллер) или лучше создать статическую функцию.
Каковы плюсы и минусы каждого метода.
Заранее спасибо 🙂
Это очень важный вопрос, касающийся лучшего способа добавления многократно используемых библиотек, выполняющих очень специфические процессы.
Способ 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');
Статические функции в контроллерах не похожи на Symfony. Внедрение сервисов и зависимостей, как правило, является подходящим способом, так как он сразу отделяет функциональность от одного контроллера и делает его более удобным для повторного использования. Думаю, что этот метод, вероятно, также обострит вашу логику относительно того, как вы строите этот сервис. Лучшая практика Symfony — для легких контроллеров, поэтому любая тяжелая бизнес-логика должна быть перенесена в сервис.