public function register()
 {
     $token = $this->helper->createToken();
     $logged = $this->loginHelper->isLoggedIn();
     $registerStudentForm = new RegisterStudentForm();
     if ($logged) {
         $registerStudentForm->setStudent($logged);
     }
     $errors = new ErrorList();
     if ($_SERVER['REQUEST_METHOD'] == 'POST') {
         $registerStudentForm->fillDataFromArray($_POST);
         $errors = $this->validations->validRegisterStudentForm($registerStudentForm, $logged);
         // $logged - $editMode
         if (!$errors->hasErrors()) {
             if ($this->helper->validToken($registerStudentForm->getToken())) {
                 if ($logged) {
                     $this->studentGateway->updateStudent($registerStudentForm->getStudent());
                     if ($registerStudentForm->getPassword != "") {
                         $this->loginHelper->createCookies($registerStudentForm->getStudent());
                     }
                     $this->redirect('/public/index.php?notify=Success');
                 } else {
                     $this->studentGateway->addStudent($registerStudentForm->getStudent());
                     $this->loginAction->login();
                     $this->redirect($this->getQuery('go'));
                 }
             } else {
                 throw new \Exception("Invalid token");
             }
         }
     }
     $this->render('templates/registration.phtml', compact('registerStudentForm', 'errors', 'token', 'logged'));
 }
 public function validRegisterStudentForm(RegisterStudentForm $registerStudentForm, $editMode = false)
 {
     $errors = $this->studentValidations->validStudent($registerStudentForm->getStudent());
     foreach ($this->validations as $field => $validator) {
         $parameters = array();
         foreach ($validator['parameters'] as $parameter) {
             $parameters[] = call_user_func([$registerStudentForm, $parameter]);
         }
         //Если включен режим редактирования, то к валидации пароля добавляем параметр сообщающий об этом.
         if ($field = 'password' and $editMode) {
             $parameters[] = true;
         }
         $errors->setError($field, call_user_func_array([$this, $validator['validator']], $parameters));
     }
     return $errors;
 }