diff --git a/src/Illuminate/Events/CallQueuedListener.php b/src/Illuminate/Events/CallQueuedListener.php index 41ecebe36d89..b362dd6c13a2 100644 --- a/src/Illuminate/Events/CallQueuedListener.php +++ b/src/Illuminate/Events/CallQueuedListener.php @@ -28,7 +28,7 @@ class CallQueuedListener implements ShouldQueue /** * The data to be passed to the listener. * - * @var string + * @var array */ public $data; @@ -37,7 +37,7 @@ class CallQueuedListener implements ShouldQueue * * @param string $class * @param string $method - * @param string $data + * @param array $data * @return void */ public function __construct($class, $method, $data) @@ -55,12 +55,14 @@ public function __construct($class, $method, $data) */ public function handle(Container $container) { + $this->prepareData(); + $handler = $this->setJobInstanceIfNecessary( $this->job, $container->make($this->class) ); call_user_func_array( - [$handler, $this->method], unserialize($this->data) + [$handler, $this->method], $this->data ); } @@ -90,15 +92,29 @@ protected function setJobInstanceIfNecessary(Job $job, $instance) */ public function failed($e) { + $this->prepareData(); + $handler = Container::getInstance()->make($this->class); - $parameters = array_merge(unserialize($this->data), [$e]); + $parameters = array_merge($this->data, [$e]); if (method_exists($handler, 'failed')) { call_user_func_array([$handler, 'failed'], $parameters); } } + /** + * Unserialize the data if needed. + * + * @return void + */ + protected function prepareData() + { + if (is_string($this->data)) { + $this->data = unserialize($this->data); + } + } + /** * Get the display name for the queued job. * diff --git a/src/Illuminate/Events/Dispatcher.php b/src/Illuminate/Events/Dispatcher.php index cc304e6e44b0..256c07491da4 100755 --- a/src/Illuminate/Events/Dispatcher.php +++ b/src/Illuminate/Events/Dispatcher.php @@ -458,7 +458,7 @@ protected function queueHandler($class, $method, $arguments) $this->resolveQueue() ->connection($connection) - ->pushOn($queue, new CallQueuedListener($class, $method, serialize($arguments))); + ->pushOn($queue, new CallQueuedListener($class, $method, $arguments)); } /**