Php Symfony2&;条令-延迟加载实体';通过一项服务获取用户的财产
我想知道是否有可能创建一个自定义的原则代理或类似的代理,允许我从服务中延迟加载实体的属性 例如:Php Symfony2&;条令-延迟加载实体';通过一项服务获取用户的财产,php,symfony,doctrine-orm,entity,lazy-loading,Php,Symfony,Doctrine Orm,Entity,Lazy Loading,我想知道是否有可能创建一个自定义的原则代理或类似的代理,允许我从服务中延迟加载实体的属性 例如: class Article { ... /** @ORM\Column(type=integer) **/ protected $userId; /** @var /MyUser **/ protected $user; } $user属性不由条令处理。通过连接到web服务的DI服务获取用户。我想做的是挂接到条令中,以便在使用$article->user时,使用自定义的DI
class Article {
...
/** @ORM\Column(type=integer) **/
protected $userId;
/** @var /MyUser **/
protected $user;
}
$user属性不由条令处理。通过连接到web服务的DI服务获取用户。我想做的是挂接到条令中,以便在使用$article->user
时,使用自定义的DI服务延迟加载对象
你知道这是否可能吗
如果不可能延迟加载,是否可以挂接到postLoad事件并使用预定义的服务加载用户对象?我肯定会使用postLoad事件。作为第一步,您可以将Web服务中的用户插入其中。 作为第二步,您可以轻松地在postLoad事件中插入代理,然后该代理将负责加载实际数据 示例: 首先,您需要配置侦听器:
services:
my.listener:
class: Acme\MyBundle\EventListener\UserInjecter
arguments: ["@my_api_service"]
tags:
- { name: doctrine.event_listener, event: postLoad }
namespace Acme\MyBundle\EventListener;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Acme\UserBundle\Entity\User;
class UserInjecter
{
protected $myApiService;
public function __construct($myApiService){
$this->myApiService = $myApiService;
}
public function postLoad(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
$entityManager = $args->getEntityManager();
if ($entity instanceof User) {
$entity->apiuser = $this->myApiService->loadUserData($entity->getIdentifier());
}
}
然后您需要实现侦听器:
services:
my.listener:
class: Acme\MyBundle\EventListener\UserInjecter
arguments: ["@my_api_service"]
tags:
- { name: doctrine.event_listener, event: postLoad }
namespace Acme\MyBundle\EventListener;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Acme\UserBundle\Entity\User;
class UserInjecter
{
protected $myApiService;
public function __construct($myApiService){
$this->myApiService = $myApiService;
}
public function postLoad(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
$entityManager = $args->getEntityManager();
if ($entity instanceof User) {
$entity->apiuser = $this->myApiService->loadUserData($entity->getIdentifier());
}
}
}我查阅了文档,但不确定如何真正做到这一点。请举一个简单的例子。谢谢,谢谢。我想我可以使用您提供的内容,另外编写一个lazyLoader类,该类实例将被分配给“postLoad”上的属性,并且在“\uu call”中,它将检测方法调用,加载对象,用对象替换lazyLoader实例,并执行请求的方法。