Чтобы избежать дублирования бизнес-логов c из действия контроллера, создайте новую службу и объявите ее в сервисном контейнере , вы указали, что используете symfony 2.8, чтобы не было autowire функция доступна, и вам нужно объявить ее вручную
services:
app.custom_service:
class: AppBundle\Service\BusinessLogicService
arguments: []
Затем вы можете использовать ее в своем контроллере, вводя ее через (внедрение зависимости) или просто вызывая ее из службы контейнера
// the container will instantiate a new BusinessLogicService()
$service = $this->container->get('app.custom_service');
Для команды вы можете реализовать ContainerAwareInterface и снова вызвать свою службу из контейнера служб
ex:
class BusinessLogicCommand extends Command implements ContainerAwareInterface
{
public function getBusinessLogicService()
{
return $this->getContainer()->get('app.custom_service');
}
}