I’m learning Symfony2 (and OOP) and want to create a service that’s available throughout my app. This service takes a value foo, checks it against a database table, and returns a value bar.
I have a little class
namespace Acme\TestBundle\Toolbox;
class StringToolbox
{
public function lookupSomething($foo)
{
$conn = $this->get('database_connection');
$sql = "SELECT bar FROM bar_list WHERE foo = :foo";
$stmt = $conn->prepare($sql);
$stmt->bindValue("foo", $foo);
$stmt->execute();
return $bar;
}
}
My settings are:
services:
toolbox:
class: Acme\TestBundle\Toolbox
arguments: [@database_connection]
But it throws an error saying that the get() method is undefined. I’m stuck– how can I use DBAL in the service? Thanks!
First off you should add a constructor to your class and pass in the
@doctrine.dbal.%connection_name%_connection serviceYour service configuration should now look like this:
What you are saying with this configuration is “make me a service named toolbox that will receive the doctrine.dbal.default_connection service as the first constructor argument”
There are other injection methods besides Constructor injection and you should read the http://symfony.com/doc/current/book/service_container.html documentation to get a grasp of all possibilities (Setter injection, Factory injection, etc) and to better understand how Dependency Injection works