diff --git a/src/Illuminate/Pipeline/Pipeline.php b/src/Illuminate/Pipeline/Pipeline.php index 56d35bca17af..90d9a1e65ec3 100644 --- a/src/Illuminate/Pipeline/Pipeline.php +++ b/src/Illuminate/Pipeline/Pipeline.php @@ -117,12 +117,15 @@ protected function getSlice() // the appropriate method and arguments, returning the results back out. if ($pipe instanceof Closure) { return call_user_func($pipe, $passable, $stack); - } else { + } elseif (! is_object($pipe)) { list($name, $parameters) = $this->parsePipeString($pipe); - - return call_user_func_array([$this->container->make($name), $this->method], - array_merge([$passable, $stack], $parameters)); + $pipe = $this->container->make($name); + $parameters = array_merge([$passable, $stack], $parameters); + } else { + $parameters = [$passable, $stack]; } + + return call_user_func_array([$pipe, $this->method], $parameters); }; }; } diff --git a/tests/Pipeline/PipelineTest.php b/tests/Pipeline/PipelineTest.php index c616d1a01cd5..b31e1045bbef 100644 --- a/tests/Pipeline/PipelineTest.php +++ b/tests/Pipeline/PipelineTest.php @@ -27,6 +27,21 @@ public function testPipelineBasicUsage() unset($_SERVER['__test.pipe.two']); } + public function testPipelineUsageWithObjects() + { + $result = (new Pipeline(new Illuminate\Container\Container)) + ->send('foo') + ->through([new PipelineTestPipeOne]) + ->then(function ($piped) { + return $piped; + }); + + $this->assertEquals('foo', $result); + $this->assertEquals('foo', $_SERVER['__test.pipe.one']); + + unset($_SERVER['__test.pipe.one']); + } + public function testPipelineUsageWithParameters() { $parameters = ['one', 'two'];