public function formAction()
 {
     $request = $this->getRequest();
     $objectManager = $this->getServiceLocator()->get('Doctrine\\ORM\\EntityManager');
     $viewmodel = new ViewModel();
     // disable layout if request by Ajax
     $viewmodel->setTerminal($request->isXmlHttpRequest());
     $id = $this->params()->fromQuery('id', null);
     $category = new Category();
     $builder = new AnnotationBuilder();
     $form = $builder->createForm($category);
     $form->setHydrator(new DoctrineObject($objectManager))->setObject($category);
     $form->get('parent')->setValueOptions($objectManager->getRepository('Application\\Entity\\Category')->getRootsAsArray($id));
     $form->get('readroles')->setValueOptions($objectManager->getRepository('Core\\Entity\\Role')->getAllAsArray());
     $type = new Select('type');
     $type->setValueOptions(Category::getTypeValueOptions());
     $type->setLabel('Type : ');
     $form->add($type);
     if ($id) {
         // bind to the category
         $category = $objectManager->getRepository('Application\\Entity\\Category')->find($id);
         if ($category) {
             if ($category instanceof RadarCategory) {
                 $form->get('type')->setValue('radar');
             } elseif ($category instanceof AntennaCategory) {
                 $form->get('type')->setValue('antenna');
             } elseif ($category instanceof FrequencyCategory) {
                 $form->get('type')->setValue('frequency');
             } elseif ($category instanceof BrouillageCategory) {
                 $form->get('type')->setValue('brouillage');
             } elseif ($category instanceof MilCategory) {
                 $form->get('type')->setValue('mil');
             }
             $form->get('type')->setAttribute('disabled', true);
             // select parent
             if ($category->getParent()) {
                 $form->get('parent')->setAttribute('value', $category->getParent()->getId());
             }
             // fill title fields available
             $customfields = array();
             foreach ($category->getCustomfields() as $field) {
                 $customfields[$field->getId()] = $field->getName();
             }
             $form->get('fieldname')->setValueOptions($customfields);
             $form->bind($category);
             $form->setData($category->getArrayCopy());
         }
     }
     $form->add(array('name' => 'submit', 'attributes' => array('type' => 'submit', 'value' => 'Enregistrer', 'class' => 'btn btn-primary')));
     $viewmodel->setVariables(array('form' => $form, 'system' => $category ? $category->isSystem() : false));
     return $viewmodel;
 }