В дополнение к ответу
shoomyst, если вы не хотите наследоваться от симфоневского контроллера, реализуйте интерфейс ContainerAwareInterface для вашего контроллера и забирайте из контейнера самостоятельно. Так же можно подключить трейт.
class MyController implements ContainerAwareInterface
{
use \Symfony\Component\DependencyInjection\ContainerAwareTrait;
function myAction(Request $request) {
// ...
$this->container->get('mailer')->send($message);
}
}
#edited
Либо, как советует
OnYourLips, если уж делаете контроллеры как сервисы, то делайте их правильно, с указанием всех зависимостей в конструкторе. Правда я считаю такой подход лишним, лучше просто держать тонкие контроллеры которые передают просто данные на обработку в сервис, и наша бизнес логика не зависит от HttpFoundation и минимально привязана к фреймворку.