【发布时间】:2024-04-25 20:20:01
【问题描述】:
我需要一些帮助:
我有以下服务:
services.yml 中的服务配置
服务:
xpad.producto_repository:
class: Xpad\ProductoBundle\Entity\ProductRepository
factory_service: doctrine.orm.clientes_entity_manager
factory_method: getRepository
arguments:
- Xpad\ProductoBundle\Entity\Product
backend_cliente.producto_filters:
class: Xpad\BackendClienteBundle\Filters\ProductFilters
calls:
- [setRepository, ["@xpad.producto_repository="]]
scope: container
并且 backend_cliente.producto_filters 的类是:
namespace Xpad\BackendClienteBundle\Filters;
use Xpad\ProductoBundle\Entity\ProductRepository;
class ProductFilters
{
private $_queryBuilder;
public function getQueryBuilder()
{
return $this->_queryBuilder;
}
public function setQueryBuilder($queryBuilder)
{
$this->_queryBuilder = $queryBuilder;
}
public function setRepository(ProductRepository $productRepository = null)
{
if($this->_queryBuilder == null)
{
$this->_queryBuilder = $productRepository->createQueryBuilder('p');
}
}
}
并且我在我的一个控制器中执行了以下操作:
class ProductController extends Controller
{
............
public function indexAction(Request $request)
{
//SOME CODE
$service_filter = $this->container->get('backend_cliente.producto_filters');
$queryBuilder = $service_filter->getQueryBuilder();
//SOME OTHER CODE
}
我的问题是:每当执行 indexAction 时,我都会获得 backend_cliente.producto_filters 服务的新实例,但我不知道为什么。我需要作为单例的唯一实例,因为 A 具有 $_queryBuilder 属性,并且我需要获取它的值,只需在需要时修改它的值即可;
请帮助我不知道我做错了什么。
【问题讨论】:
-
您是否希望您的实例能够在多个 Web 请求中存活,因为这不会发生。或者你是在向 indexAction 发出一堆子请求吗?顺便说一句,您的服务名称“@xpad.producto_repository=”中有一个 =。因此,您发布的代码将无法按预期工作。
标签: symfony service scope singleton