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