第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 EventSubscriber 將函數(shù)的返回值作為屬性傳遞給 json

使用 EventSubscriber 將函數(shù)的返回值作為屬性傳遞給 json

PHP
函數(shù)式編程 2021-06-09 13:08:16
我已經(jīng)使用 JMS 序列化包構(gòu)建了一個 api。此外,我有一個實體Ticket,它有一個名為TicketRepository的存儲庫。此存儲庫包含以下方法:/** * @param Ticket $object * * @return string */public function findByTicketDeadline($object){  // some logic}我的目標(biāo):使用 EventSubscriber 將此函數(shù)的返回值傳遞給 json。這是我的類TicketSerializationSubscriber class TicketSerializationSubscriber implements EventSubscriberInterface{    /**     * @param ObjectEvent $event     */    public function onPostSerialize(ObjectEvent $event)    {        /** @var JsonSerializationVisitor $visitor */        $visitor = $event->getVisitor();        $visitor->setData('ticketDeadline', 'TEST TICKET'); // WORKS        /** @var Ticket $ticket */        $ticket = $event->getObject();        /** @var TicketRepository $ticketRepo */        $ticketRepo = $event->getObject();        $visitor->setData('TESTING', $ticketRepo->findByTicketDeadline($ticket));//        $visitor->setData('uri',//                $this->router->generate('ticket_api_show', [//                    'ticketDeadline' => $ticketRepo->findByTicketDeadline($ticket)//                ])//        );    }    public static function getSubscribedEvents()    {        return array(            array(                'event' => 'serializer.post_serialize',                'method' => 'onPostSerialize',                'class' => 'CMS3\CoreBundle\Entity\Ticket', // if no class, subscribe to every serialization                //'class' => 'CMS3\CoreBundle\Repository\TicketRepository', // if no class, subscribe to every serialization                'format' => 'json', // optional format                //'priority' => 0, // optional priority            ),        );    }}當(dāng)我將存儲庫方法傳遞給 $visitor->setData() 函數(shù)時,出現(xiàn)此錯誤:
查看完整描述

1 回答

?
小怪獸愛吃肉

TA貢獻(xiàn)1852條經(jīng)驗 獲得超1個贊

您當(dāng)前的代碼失敗,因為$ticketRepo = $event->getObject();它返回的Ticket對象是它上面一行中的對象,而不是預(yù)期的TicketRepository.


您需要將EntityManageror Repository(如果您有存儲庫作為服務(wù))注入您TicketSerializationSubscriber::__construct()的TicketRepository.


假設(shè)您已autowire啟用包含TicketSerializationSubscriber.


use Doctrine\ORM\EntityManagerInterface;


class TicketSerializationSubscriber implements EventSubscriberInterface

{

    /**

     * @var \Doctrine\ORM\EntityManager

     */

    private $em;


    public function __construct(EntityManagerInterface $em)

    {

         $this->em = $em;

    }


    public function onPostSerialize(ObjectEvent $event)

    {

        /** @var JsonSerializationVisitor $visitor */

        $visitor = $event->getVisitor();


        $ticket = $event->getObject();

        if (!$ticket instanceof Ticket) {

            //ensure object is of expected type

            return;

        }


        /** @var TicketRepository $ticketRepo */

        $ticketRepo = $this->em->getRepository(Ticket::class);


        $visitor->setData('TESTING', $ticketRepo->findByTicketDeadline($ticket));

        //...

    }


    //...


}

如果不使用,autowire您將需要手動將其添加到您的TicketSerializationSubscriber服務(wù)聲明參數(shù)中。


#app/config/services.yml


services:

    #...


    TicketSerializationSubscriber:

        public: false

        arguments: ['@doctrine.orm.entity_manager']

        tags:

            - { name: kernel.event_subscriber }

            #...

確保在進(jìn)行更改后clear和warmupSymfony 緩存。


查看完整回答
反對 回復(fù) 2021-06-25
  • 1 回答
  • 0 關(guān)注
  • 205 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號