我已将dbal连接从控制器传递给执行大量查询和计算的类,如
$conn = $this->get('database_connection');
$stats = new Statistics($conn, $criteria);
这是正确的吗?为连接创建服务似乎没有帮助,因为我需要使用两个参数调用该类。是否有更好或更正确的方法来达到同样的目的?这种方法至少有效。
答案 0 :(得分:2)
最好的方法是通过服务容器创建服务和加载。
<强> Services.yml 强>
Acme.demo.statics:
class: Acme\DemoBundle\Handler\Statistics
arguments: [@database_connection, { param1: %param1%, param2: %param1%}]
<强> Statistics.php 强>
use Doctrine\DBAL\Connection;
class Statistics
{
protected $connection;
protected $parameters;
public function __construct(Connection $connection, array $parameters)
{
$this->connection = $connection;
$this->parameters = $parameters;
}
答案 1 :(得分:0)
您是否可以控制Statistices类?
如果是,则从构造函数中删除条件,并实现setCriteria方法或将条件作为getResults或任何方法的一部分传递。
@Venu向您展示了使用参数传递数据的热点。如果您的条件数组可以提前设置,那么您可以使用它。但我猜这个标准是在请求期间建立的。
并且不要求Statistic成为服务。只是让事情变得容易一些。因此,如果您对现有代码感到满意,那么请不要担心。只是意味着你需要在想要制作连接对象时抓住它。这意味着如果你确实需要注入其他对象,那么你的代码就必须改变。