Я создал службу для подключения к Doctrine в своих моделях (не уверен, что это хороший подход, но я не хочу каждый раз передавать соединение от контроллера к конструктору модели).
Допустим, мне нужны продукты в моем контроллере.
public function getProductsAction(Request $request) {
$product_model = new ProductModel();
return $product_model->getProducts();
}
У меня есть модель продукта, которая будет обращаться к помощнику, чтобы получить "database_connection"
use AppBundle\Helper\ContainerHelper;
class ProductModel {
function getProducts() {
$helper = new ContainerHelper();
$db = $helper->getDoctrine();
$query = "SELECT * FROM customer_products;";
$statement = $db->prepare($query);
$statement->execute();
$result = $statement->fetchAll(PDO::FETCH_ASSOC);
return $result;
}
}
Теперь этот помощник определен в src / AppBundle / Helper / ContainerHelper.php
namespace AppBundle\Helper;
use Symfony\Component\DependencyInjection\ContainerInterface as Container;
class ContainerHelper {
private $container;
public function __construct(Container $container) {
$this->container = $container;
}
public static function getDoctrine() {
$database_connection = $this->container->get('database_connection');
return $database_connection;
}
}
Допустим, этой службе нужен «контейнер службы», поэтому в app / config / services.yml
services:
app.container_helper:
class: AppBundle\Helper\ContainerHelper
arguments: ['@service_container']
Но это дает мне ошибку:
Уловимая фатальная ошибка: аргумент 1, переданный в AppBundle \ Helper \ ContainerHelper :: __ construct (), должен реализовывать интерфейс Symfony \ Component \ DependencyInjection \ ContainerInterface, не указан, вызывается в \ src \ AppBundle \ Model \ ProductModel.php в строке 148 и определяется
Хотя я считаю, что реализовал его правильно в соответствии с http://symfony.com/doc/current/book/service_container.html и http://anjanasilva.com/blog/injecting-services-in-symfony-2/, я уверен, что я что-то упустил или только что понял всю плохую идею. Мне нужно знать, правильная ли это концепция или что я упустил