/**
  * Standard preferences handling via preferences form subclass
  *
  * @param string $name Name of the form service
  * @return \Zend\View\Model\ViewModel|\Zend\Http\Response View model for "form.php" template or redirect response
  */
 protected function _useForm($name)
 {
     $form = $this->_formManager->get($name);
     if ($this->getRequest()->isPost()) {
         $form->setData($this->params()->fromPost());
         if ($form->isValid()) {
             // Flatten Preferences array, i.e. incorporate fields from a
             // fieldset into a single array.
             $this->_config->setOptions(new \RecursiveIteratorIterator(new \RecursiveArrayIterator($form->getData()['Preferences'])));
             return $this->redirectToRoute('preferences', $this->getEvent()->getRouteMatch()->getParams()['action']);
         }
     } else {
         $preferences = array();
         foreach ($form->get('Preferences') as $element) {
             $name = $element->getName();
             if ($element instanceof \Zend\Form\Fieldset) {
                 foreach ($element as $subElement) {
                     $subElementName = $subElement->getName();
                     $preferences[$name][$subElementName] = $this->_config->{$subElementName};
                 }
             } else {
                 $preferences[$name] = $this->_config->{$name};
             }
         }
         $form->setData(array('Preferences' => $preferences));
     }
     return $this->printForm($form);
 }