Прежде всего, вы должны добавить конструктор в ваш класс и передать @doctrine.dbal.%connection_name%_connection service
namespace Acme\TestBundle\Toolbox;
use Doctrine\DBAL\Connection;
class StringToolbox
{
/**
*
* @var Connection
*/
private $connection;
public function __construct(Connection $dbalConnection) {
$this->connection = $dbalConnection;
}
public function lookupSomething($foo)
{
$sql = "SELECT bar FROM bar_list WHERE foo = :foo";
$stmt = $this->connection->prepare($sql);
$stmt->bindValue("foo", $foo);
$stmt->execute();
return $bar;
}
}
Ваша конфигурация сервиса теперь должна выглядеть так:
parameters:
my_service_connection: default
services:
toolbox:
class: Acme\TestBundle\Toolbox\StringToolbox
arguments: [@doctrine.dbal.%my_service_connection%_connection]
С этой конфигурацией вы говорите: «Сделайте мне службу с именем toolbox, которая получит службу doctrine.dbal.default_connection в качестве первого аргумента конструктора»
Существуют и другие методы инъекции, кроме инъекции в конструктор, и вам следует прочитать документацию http://symfony.com/doc/current/book/service_container.html, чтобы получить представление обо всех возможностях (инжекция сеттера, фабричная инъекция и т. Д.) И лучше понять, как работает инъекция зависимости