public function printer($valuePath, $keyPath = null, $spacer = '__')
    {
        if (!$keyPath) {
            $counter = 0;
            $keyPath = function () use (&$counter) {
                return $counter++;
            };
        }

        return new TreePrinter(
            $this->getInnerIterator(),
            $valuePath,
            $keyPath,
            $spacer,
            $this->_mode
        );
    }
public function printer($valuePath, $keyPath = null, $spacer = '__')
    {
        if (!$keyPath) {
            $counter = 0;
            $keyPath = function () use (&$counter) {
                return $counter++;
            };
        }

        return new TreePrinter(
            $this->getInnerIterator(),
            $valuePath,
            $keyPath,
            $spacer,
            $this->_mode
        );
    }
public function printer ( $ valuePath , $ keyPath = null , $ spacer = '__' ) { if ( ! $ keyPath ) { $ counter = 0 ; $ keyPath = function ( ) use ( & $ counter ) { return $ counter ++ ; } ; } return new TreePrinter ( $ this -> getInnerIterator ( ) , $ valuePath , $ keyPath , $ spacer , $ this -> _mode ) ; }
Returns another iterator which will return the values ready to be displayed
to a user. It does so by extracting one property from each of the elements
and prefixing it with a spacer so that the relative position in the tree
can be visualized.

Both $valuePath and $keyPath can be a string with a property name to extract
or a dot separated path of properties that should be followed to get the last
one in the path.

Alternatively, $valuePath and $keyPath can be callable functions. They will get
the current element as first parameter, the current iteration key as second
parameter, and the iterator instance as third argument.

### Example

```
$printer = (new Collection($treeStructure))->listNested()->printer('name');
```

Using a closure:

```
$printer = (new Collection($treeStructure))
->listNested()
->printer(function ($item, $key, $iterator) {
return $item->name;
});
```

@param string|callable $valuePath The property to extract or a callable to return
the display value
@param string|callable|null $keyPath The property to use as iteration key or a
callable returning the key value.
@param string $spacer The string to use for prefixing the values according to
their depth in the tree
@return \Cake\Collection\Iterator\TreePrinter
Returns another iterator which will return the values ready to be displayed to a user . It does so by extracting one property from each of the elements and prefixing it with a spacer so that the relative position in the tree can be visualized .