/** * 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); }