renderer = $renderer; $this->userTable = $userTable; $this->router = $router; $this->auth = $auth; $this->flashService = $flashService; } public function __invoke(ServerRequestInterface $request) { if ($request->getMethod() === 'GET') { return $this->renderer->render('@account/signup'); } $params = $request->getParsedBody(); $validator = (new Validator($params)) ->required('username', 'email', 'password', 'password_confirm', 'firstname', 'lastname', 'created_at') ->length('username', 3) ->length('firstname', 2) ->length('lastname', 2) ->email('email') ->confirm('password') ->length('password', 4) ->unique('username', $this->userTable) ->unique('email', $this->userTable); if ($validator->isValid()) { $userParams = [ 'username' => $params['username'], 'firstname'=> $params['firstname'], 'lastname'=> $params['lastname'], 'email' => $params['email'], 'password' => password_hash($params['password'], PASSWORD_DEFAULT), 'created_at' => $params['created_at'], 'role' => 'user' ]; $this->userTable->insert($userParams); $user = Hydrator::hydrate($userParams, User::class); $user->id = $this->userTable->getPdo()->lastInsertId(); $this->auth->setUser($user); $this->flashService->success('Votre compte a bien été créé'); return new RedirectResponse($this->router->generateUri('account')); } $errors = $validator->getErrors(); return $this->renderer->render('@account/signup', [ 'errors' => $errors, 'user' => [ 'username' => $params['username'], 'email' => $params['email'], 'firstname'=> $params['firstname'], 'lastname'=> $params['lastname'], 'created_at' => $params['created_at'] ] ]); } }