maxpoitn2point
@maxpoitn2point
Как всегда, в своем репертуаре

Каким еще способом можно внести изменения в сторонний бандл?

Суть изменения это выставление каждому пользователю роли администратора,

этот способ мне кажется не очень правильным, что можно сделать куда более проще.

namespace ACVote\UsersBundle\Controller;

use FOS\UserBundle\Controller\RegistrationController as BaseController;
use Symfony\Component\HttpFoundation\Request;
use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Event\FormEvent;
use FOS\UserBundle\Event\GetResponseUserEvent;
use FOS\UserBundle\Event\FilterUserResponseEvent;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use FOS\UserBundle\Model\UserInterface;

class RegistrationController extends BaseController
{
    public function registerAction(Request $request)
    {
        /** @var $formFactory \FOS\UserBundle\Form\Factory\FactoryInterface */
        $formFactory = $this->get('fos_user.registration.form.factory');
        /** @var $userManager \FOS\UserBundle\Model\UserManagerInterface */
        $userManager = $this->get('fos_user.user_manager');
        /** @var $dispatcher \Symfony\Component\EventDispatcher\EventDispatcherInterface */
        $dispatcher = $this->get('event_dispatcher');

        $user = $userManager->createUser();
        $user->setEnabled(true);
        $user->setSuperAdmin(true);

        $event = new GetResponseUserEvent($user, $request);
        $dispatcher->dispatch(FOSUserEvents::REGISTRATION_INITIALIZE, $event);

        if (null !== $event->getResponse()) {
            return $event->getResponse();
        }

        $form = $formFactory->createForm();
        $form->setData($user);

        $form->handleRequest($request);

        if ($form->isValid()) {
            $event = new FormEvent($form, $request);
            $dispatcher->dispatch(FOSUserEvents::REGISTRATION_SUCCESS, $event);

            $userManager->updateUser($user);

            if (null === $response = $event->getResponse()) {
                $url = $this->generateUrl('fos_user_registration_confirmed');
                $response = new RedirectResponse($url);
            }

            $dispatcher->dispatch(FOSUserEvents::REGISTRATION_COMPLETED, new FilterUserResponseEvent($user, $request, $response));

            return $response;
        }

        return $this->render('FOSUserBundle:Registration:register.html.twig', array(
            'form' => $form->createView(),
        ));
    }
}

т.е. я просто скопировал исходный код из вендорного бандла и добавил в нем нужную мне строчку.

или должно быть что то вроде такого? но так оно точно работать не будет.
$response = parent::registerAction($request);
        $user->setSuperAdmin(true);
        return $response;


И где тут обработка пароля и логина?
Если взять
$user = $userManager->createUser();
$user->setEnabled(true);
$user->setSuperAdmin(true);

тут понятно. но как обрабатываются другие формы?
  • Вопрос задан
  • 235 просмотров
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
относительно правильным будет отнаследоваться от модели предоставляемой FosUserBundle и просто в конструкторе вызывать этот метод.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@XeuRun
Можете форкнуть бандл на гитхабе, переписать код как вам нужно и добавить пакет на packagist.org, далее через composer подключить к себе в проект.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы