Laravel 传递的`event`,和`listeners`中的`event`对象不是一个对象吗?

Controller中触发订单生成,打印结果是null,需要拿到的是order model

  • 如果说Controllerlisteners中的event对象不同,那么Controller传过去的event所包含的属性,listeners中的event应该是拿不到的,实际可以拿到;
  • 如果说Controllerlisteners中的event对象相同,那么listeners中的event传回来的数据Controller中的event返回是null呢?

我大致简略写下实现过程

<?php
namespace App\Http\Controllers;

use App\Events\OrderEvent;

class DealController extends Controller 
{
    public function ticket(Request  $request) 
    {
        $orderEvent = new  OrderEvent();
        event($orderEvent);

        dd($orderEvent->getOrder());
    }
}

我在OrderEvent中只做一件事,保存order model,输出order model

<?php
namespace App\Events;

use App\Chongzhi;

class OrderEvent 
{
    private $_order = null;

    public function success(Chongzhi $order):OrderEvent
    {
        $this->_order = $order;
        return  $this;
    }

    public function getOrder():?Chongzhi
    {
        return  $this->_order;
    }
}

listeners中我只提供了order model

<?php
namespace App\Listeners;

use App\Chongzhi;

class OrderEventSubscriber
{
    public function handleCreateOrder(OrderEvent  $event)
    {
        $event->success(Chongzhi::create());
    }

    public function subscribe($events)
    {
        $events->listen(
            'App\Events\Order\OrderEvent',
            'App\Listeners\OrderEventSubscriber@handleCreateOrder'
        );
    }
}
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

搞定了,测试了很多次,发现是这两个对象问题,由于提问简略了,没有体现出来。留个记号以便今后记录

无法传值的对象

<?php
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;

class OrderEventSubscriber  implements ShouldQueue 
{
    use InteractsWithQueue;
    ...
}

去掉后就正常了

<?php
class OrderEventSubscriber
{
    ...
}
4年前 评论
讨论数量: 3

你的订阅者类没有在EventServiceProvider 注册吧

4年前 评论
levi (楼主) 4年前
levi (楼主) 4年前

private $_order = null; 换成 public $_order = null;

4年前 评论

搞定了,测试了很多次,发现是这两个对象问题,由于提问简略了,没有体现出来。留个记号以便今后记录

无法传值的对象

<?php
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;

class OrderEventSubscriber  implements ShouldQueue 
{
    use InteractsWithQueue;
    ...
}

去掉后就正常了

<?php
class OrderEventSubscriber
{
    ...
}
4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!