/Controller/ProfileController.php
http://github.com/FriendsOfSymfony/FOSUserBundle · PHP · 107 lines · 66 code · 18 blank · 23 comment · 8 complexity · 3aff4285d5f2a0fea7191a0eb52270d0 MD5 · raw file
- <?php
- /*
- * This file is part of the FOSUserBundle package.
- *
- * (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace FOS\UserBundle\Controller;
- use FOS\UserBundle\Event\FilterUserResponseEvent;
- use FOS\UserBundle\Event\FormEvent;
- use FOS\UserBundle\Event\GetResponseUserEvent;
- use FOS\UserBundle\Form\Factory\FactoryInterface;
- use FOS\UserBundle\FOSUserEvents;
- use FOS\UserBundle\Model\UserInterface;
- use FOS\UserBundle\Model\UserManagerInterface;
- use Symfony\Bundle\FrameworkBundle\Controller\Controller;
- use Symfony\Component\EventDispatcher\EventDispatcherInterface;
- use Symfony\Component\HttpFoundation\RedirectResponse;
- use Symfony\Component\HttpFoundation\Request;
- use Symfony\Component\HttpFoundation\Response;
- use Symfony\Component\Security\Core\Exception\AccessDeniedException;
- /**
- * Controller managing the user profile.
- *
- * @author Christophe Coevoet <stof@notk.org>
- *
- * @final
- */
- class ProfileController extends Controller
- {
- private $eventDispatcher;
- private $formFactory;
- private $userManager;
- public function __construct(EventDispatcherInterface $eventDispatcher, FactoryInterface $formFactory, UserManagerInterface $userManager)
- {
- $this->eventDispatcher = $eventDispatcher;
- $this->formFactory = $formFactory;
- $this->userManager = $userManager;
- }
- /**
- * Show the user.
- */
- public function showAction()
- {
- $user = $this->getUser();
- if (!is_object($user) || !$user instanceof UserInterface) {
- throw new AccessDeniedException('This user does not have access to this section.');
- }
- return $this->render('@FOSUser/Profile/show.html.twig', [
- 'user' => $user,
- ]);
- }
- /**
- * Edit the user.
- *
- * @return Response
- */
- public function editAction(Request $request)
- {
- $user = $this->getUser();
- if (!is_object($user) || !$user instanceof UserInterface) {
- throw new AccessDeniedException('This user does not have access to this section.');
- }
- $event = new GetResponseUserEvent($user, $request);
- $this->eventDispatcher->dispatch(FOSUserEvents::PROFILE_EDIT_INITIALIZE, $event);
- if (null !== $event->getResponse()) {
- return $event->getResponse();
- }
- $form = $this->formFactory->createForm();
- $form->setData($user);
- $form->handleRequest($request);
- if ($form->isSubmitted() && $form->isValid()) {
- $event = new FormEvent($form, $request);
- $this->eventDispatcher->dispatch(FOSUserEvents::PROFILE_EDIT_SUCCESS, $event);
- $this->userManager->updateUser($user);
- if (null === $response = $event->getResponse()) {
- $url = $this->generateUrl('fos_user_profile_show');
- $response = new RedirectResponse($url);
- }
- $this->eventDispatcher->dispatch(FOSUserEvents::PROFILE_EDIT_COMPLETED, new FilterUserResponseEvent($user, $request, $response));
- return $response;
- }
- return $this->render('@FOSUser/Profile/edit.html.twig', [
- 'form' => $form->createView(),
- ]);
- }
- }