![](/img/trans.png)
[英]Symfony2 and Doctrine: proxy class does not lazy load entity fields
[英]Symfony2 & Doctrine - Lazy load an entity's property through a service
我想知道是否有可能創建自定義的教義代理或類似的代理,以使我可以從服務中延遲加載實體的屬性。
例:
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());
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.