问题描述
我有一个在登录页面上扩展的实体,但在下一页上,扩展名不存在(实体在两个页面上都存在)。有没有办法在下一页上提供我的扩展程序?
<?PHP
namespace RegistrationExtension\Subscriber;
use ...
class RegisterExtensionSubscriber implements EventSubscriberInterface{
private $company;
/**
* @var EntityRepositoryInterface
*/
private $mailTypeRepository;
/**
* @var EntityRepositoryInterface
*/
private $mailRepository;
/**
* @var EntityRepositoryInterface
*/
private $customerRepo;
public function __construct(
EntityRepositoryInterface $customerRepo,EntityRepositoryInterface $mailTypeRepository,EntityRepositoryInterface $mailRepository
) {
$this->customerRepo = $customerRepo;
$this->mailTypeRepository = $mailTypeRepository;
$this->mailRepository = $mailRepository;
}
public static function getSubscribedEvents(): array{
return [
AccountLoginPageLoadedEvent::class => 'extendCustomer',AccountOverviewPageLoadedEvent::class => 'onCustomregister'
];
}
public function extendCustomer(AccountLoginPageLoadedEvent $event){
// if (isset($_POST['submit'])) {
if(isset($_GET["email"])){
$company = $_GET["email"];
}else{
$company = null;
}
$mailEntity = $this->mailTypeRepository->search(
(new Criteria())->addFilter(new EqualsFilter('mail_template_type.technicalName',"customer_register")),$event->getContext()
);
if ($mailType = $mailEntity->getEntities()->first()) {
$mailEntity = $this->mailRepository->search(
(new Criteria())->addFilter(new EqualsFilter('mail_template.mailTemplateTypeId',$mailType->getId())),$event->getContext()
);
$mailEntity->getEntities()->first()->addExtension('file_does_exist',new ArrayEntity(['company' => "blub"]));
dump($mailEntity->getEntities()->first());
}
// }
}
public function onCustomregister(AccountOverviewPageLoadedEvent $event){
$mailEntity = $this->mailTypeRepository->search(
(new Criteria())->addFilter(new EqualsFilter('mail_template_type.technicalName',$event->getContext()
);
if ($mailType = $mailEntity->getEntities()->first()) {
$mailEntity = $this->mailRepository->search(
(new Criteria())->addFilter(new EqualsFilter('mail_template.mailTemplateTypeId',$event->getContext()
);
dump($mailEntity);
// $mail = $mailEntity->getEntities()->first()->addExtension('file_does_exist',new ArrayEntity(['company' => $company]));
}
$customerEntity = $this->customerRepo->search(
(new Criteria())->addFilter(new EqualsFilter('customer.customerNumber',$event->getSalesChannelContext()->getCustomer()->getCustomerNumber())),$event->getContext()
);
}
}
是否可以将AccountOverviewPageLoadedEvent事件载入?
解决方法
正如您在开发时已经发现的那样,扩展不会持久存在。 您想要的是EntityExtension。这样,您可以扩展客户实体。但是,由于只能通过EntityExtension添加关联和外键字段,因此您将需要一个自己的实体。
因此,假设您create a entity:CustomerRegistrationFile 然后,您可以扩展CustomerDefinition并将您的CustomerRegistrationFile添加为关联。这样,您可以直接在实体上保留数据,并可以将其加载到任何需要的位置,例如在邮件模板中。
侧面说明:关联不会自动加载。除了OneToOneAssociations,可以从一端自动加载。为了防止循环引用,不是两端都没有。