Ответ 1
Сначала вы должны добавить конструктор в свой класс и передать в @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, чтобы понять все возможности (инъекция Setter, Factory и т.д.) и лучше понять, как работает Injection Dependency.