Как правильно переопределить контроллер профиля FOSUserBundle? - PullRequest
1 голос
/ 11 февраля 2012

Я хотел бы переопределить действие редактирования ProfileController FosUserBundle.Я создал контроллер в своем собственном UserBundle, скопировал в него действие редактирования и внес некоторые изменения.В этом контроллере есть проверка, является ли вошедший в систему пользователь instanceOf UserInterFace.По-видимому, это не потому, что он выдает исключение при доступе, когда я захожу в / profile / edit

Почему зарегистрированный пользователь больше не является instanceOf UserInterFace?

Контроллер:

namespace Tennisconnect\UserBundle\Controller;

use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use FOS\UserBundle\Controller\ProfileController as BaseController;

class ProfileController extends BaseController
{
/**
     * Edit the user
     */
    public function editAction()
    {
        $user = $this->container->get('security.context')->getToken()->getUser();

        if (!is_object($user) || !$user instanceof UserInterface) {
            throw new AccessDeniedException('This user does not have access to this     section.');
        }

        $form = $this->container->get('fos_user.profile.form');
        $formHandler = $this->container->get('fos_user.profile.form.handler');

        $process = $formHandler->process($user);
        if ($process) {
            $user->upload();
            $this->setFlash('fos_user_success', 'profile.flash.updated');

            return new RedirectResponse($this->container->get('router')->generate('fos_user_profile_show'));
        }

        return $this->container->get('templating')->renderResponse(
        'FOSUserBundle:Profile:edit.html.'.$this->container->getParameter('fos_user.template.engine'),
        array('form' => $form->createView(), 'theme' => $this->container->getParameter('fos_user.template.theme'))
        );
    }
}

Ответы [ 2 ]

4 голосов
/ 12 февраля 2012

Читая ваш фрагмент кода, я бы сказал, что это просто потому, что вы не соответствуете полностью квалифицированному пространству имен UserInterface.

Либо импортируйте класс с помощью:

use Symfony\Component\Security\Core\User\UserInterface;

, либо измените вашкод вроде этого:

if (!is_object($user) || !$user instanceof  Symfony\Component\Security\Core\User\UserInterface) {
3 голосов
/ 10 августа 2012

Более чистое решение состоит в создании нового пакета "MyFOSBundle" в классе пакета:

getParent()
{
    return "FosBundle";
}

Затем вы записываете файл, который хотите переопределить, в том же месте.

http://symfony.com/doc/master/cookbook/bundles/inheritance.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...