コード例 #1
0
ファイル: User.php プロジェクト: nxnx/donatservice
 /**
  * Выполняет действие над объектом
  * @param string $action
  * @param Request|null $request
  * @return Form|true true если форма была отправлена и успешно обработана(в остальных случаях она будет содержать ошибки)
  */
 public function processAction($action, Request $request = null)
 {
     if (is_null($this->type)) {
         throw new \Exception('wrong type');
     }
     $this->checkAction($action);
     $this->auth->setEntityName($this->type);
     $action_data = self::getActionData($action);
     $object = null;
     if ($action == 'reg') {
         $object = $this->create();
     }
     $form_action = $this->router->generate('process_action', array('action' => $action, 'type' => $this->type));
     $form = $this->form_builder->createForm($object, $action_data['caption'], $action_data['is_login'], $form_action, null, !is_null($request));
     if (is_null($request)) {
         return $form;
     }
     $form->handleRequest($request);
     if (!$form->isSubmitted() || !$form->isValid()) {
         return $form;
     }
     $ok = false;
     switch ($action) {
         case 'logout':
             try {
                 $this->auth->Logout();
                 $ok = true;
             } catch (\Exception $e) {
                 $form->addError(new FormError('Ошибка выхода: ' . $e->getMessage()));
             }
             break;
         case 'login':
             try {
                 $data = $form->getData();
                 $this->auth->Authenticate($data['login'], $data['password']);
                 $ok = true;
             } catch (\Exception $e) {
                 $form->addError(new FormError($e->getMessage()));
             }
             break;
         case 'reg':
             try {
                 $this->em->persist($object);
                 $this->em->flush();
                 $ok = true;
             } catch (UniqueConstraintViolationException $e) {
                 $form->addError(new FormError('Такой пользователь уже существует'));
             } catch (\Exception $e) {
                 $form->addError(new FormError('Внутренняя ошибка сервера, попробуйте позднее'));
             }
             break;
         default:
             throw new \Exception('unhandled form type');
     }
     return $ok ? true : $form;
 }