使用Shopware 6通过services.xml注入实体存储库的“经典”方法如下
# your service/controller
private EntityRepository $productRepository;
...
public function __construct(
EntityRepository $productRepository
) {
$this->$productRepository = $productRepository;
}
...
<!-- your services.xml -->
<service id="...">
<argument type="service" id="product.repository"/>
</service>
现在,如果我想使用Symfony的自动装配-什么会相当于上述符号?
(In换句话说,我这里的观点是如何告诉Symfony我想要连接product.repository服务,而不仅仅是通用的repository?)
2条答案
按热度按时间kqhtkvqz1#
快速解释它是如何在内部工作的,以便您更好地理解。
Shopware首先找到定义,然后在
CompilerPass
过程中动态创建存储库。https://github.com/shopware/platform/blob/v6.5.5.1/src/Core/Framework/DependencyInjection/CompilerPass/EntityCompilerPass.php#L35
在容器(
aliasDefinitions
属性)中,它的结果如下:所以,换句话说,通常你有这些定义:
你将能够在PHP文件上自动访问这样的存储库:
不必担心手工定义存储库.
jtoj6r0c2#
我发现的解决方案实际上相当简单和直接:-)使用Autowire参数属性指定构造函数,如下所示:
如果你遵守Shopware的命名约定,你甚至可以省略Autowire参数,在上面的例子中,变量名
$productRepository
将被正确解析为'product.repository'
服务。(礼貌@Alex的评论见下文)