src/Onion.php
public function peel($object, Closure $core)
    {
        $coreFunction = $this->createCoreFunction($core);

        // Since we will be "currying" the functions starting with the first
        // in the array, the first function will be "closer" to the core.
        // This also means it will be run last. However, if the reverse the
        // order of the array, the first in the list will be the outer layers.
        $layers = array_reverse($this->layers);

        // We create the onion by starting initially with the core and then
        // gradually wrap it in layers. Each layer will have the next layer "curried"
        // into it and will have the current state (the object) passed to it.
        $completeOnion = array_reduce($layers, function($nextLayer, $layer){
            return $this->createLayer($nextLayer, $layer);
        }, $coreFunction);

        // We now have the complete onion and can start passing the object
        // down through the layers.
        return $completeOnion($object);
    }
public function peel($object, Closure $core)
    {
        $coreFunction = $this->createCoreFunction($core);

        // Since we will be "currying" the functions starting with the first
        // in the array, the first function will be "closer" to the core.
        // This also means it will be run last. However, if the reverse the
        // order of the array, the first in the list will be the outer layers.
        $layers = array_reverse($this->layers);

        // We create the onion by starting initially with the core and then
        // gradually wrap it in layers. Each layer will have the next layer "curried"
        // into it and will have the current state (the object) passed to it.
        $completeOnion = array_reduce($layers, function($nextLayer, $layer){
            return $this->createLayer($nextLayer, $layer);
        }, $coreFunction);

        // We now have the complete onion and can start passing the object
        // down through the layers.
        return $completeOnion($object);
    }
public function peel ( $ object , Closure $ core ) { $ coreFunction = $ this -> createCoreFunction ( $ core ) ; // Since we will be "currying" the functions starting with the first // in the array, the first function will be "closer" to the core. // This also means it will be run last. However, if the reverse the // order of the array, the first in the list will be the outer layers. $ layers = array_reverse ( $ this -> layers ) ; // We create the onion by starting initially with the core and then // gradually wrap it in layers. Each layer will have the next layer "curried" // into it and will have the current state (the object) passed to it. $ completeOnion = array_reduce ( $ layers , function ( $ nextLayer , $ layer ) { return $ this -> createLayer ( $ nextLayer , $ layer ) ; } , $ coreFunction ) ; // We now have the complete onion and can start passing the object // down through the layers. return $ completeOnion ( $ object ) ; }
Run middleware around core function and pass an
object through it
@param  mixed  $object
@param  Closure $core
@return mixed
Run middleware around core function and pass an object through it