original_string: 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
          );
      }
code: 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
          );
      }
code_tokens: 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 ) ; }
docstring: 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
docstring_tokens: 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 .