【发布时间】:2016-07-22 10:44:56
【问题描述】:
我已经在我的模型中提供了获取 Doctrine 连接的服务(不确定这是否是一个不错的方法,但我不想每次都将连接从控制器传递到模型构造函数)。
假设我想要控制器中的产品
public function getProductsAction(Request $request) {
$product_model = new ProductModel();
return $product_model->getProducts();
}
我有 Product 模型,它将访问帮助器以获取“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/ 正确实现了它,但可以肯定的是我错过了一些东西或者只是得到了整个坏主意。我需要知道这是一个正确的概念还是我错过了什么
【问题讨论】:
标签: service dependency-injection model doctrine symfony