微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Symfony-是否可以将实体设置为全局?

如何解决Symfony-是否可以将实体设置为全局?

我有一个登录页面上扩展的实体,但在下一页上,扩展名不存在(实体在两个页面上都存在)。有没有办法在下一页上提供我的扩展程序?

<?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,可以从一端自动加载。为了防止循环引用,不是两端都没有。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。