Symfony4 - Ошибка при посещении / регистрации страницы

Я использую FOSUserBundle с Symfony4. При попытке посетить URL-адрес /register я получаю следующее сообщение об ошибке:

Attempted to load class "User" from namespace "AppBundle\Entity".
Did you forget a "use" statement for e.g. "Symfony\Component\Security\Core\User\User", "Symfony\Bridge\Doctrine\Tests\Fixtures\User" or "FOS\UserBundle\Model\User"?

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

Вот код класса User.php.

namespace AppBundle\Entity;

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;


/**
 * @ORM\Entity
 * @ORM\Table(name = "fos_user")
 */
class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type = "integer")
     * @ORM\GeneratedValue(strategy = "AUTO")
     */
    protected $id;

    public function __construct()
    {
        parent::__construct();
        // your own logic
    }
}

А вот для config/packages/fos_user.yaml

fos_user:
    db_driver: orm
    firewall_name: main
    user_class: AppBundle\Entity\User

Вот код RegistrationController, связанный с действием register. (примечание: это автогенерируемый код, я ничего не менял)

/*
 * 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\HttpFoundation\Session\SessionInterface;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;

/**
 * Controller managing the registration.
 *
 * @author Thibault Duplessis <[email protected]>
 * @author Christophe Coevoet <[email protected]>
 */
class RegistrationController extends Controller
{
    private $eventDispatcher;
    private $formFactory;
    private $userManager;
    private $tokenStorage;

    public function __construct(EventDispatcherInterface $eventDispatcher, FactoryInterface $formFactory, UserManagerInterface $userManager, TokenStorageInterface $tokenStorage)
    {
        $this->eventDispatcher = $eventDispatcher;
        $this->formFactory = $formFactory;
        $this->userManager = $userManager;
        $this->tokenStorage = $tokenStorage;
    }

    /**
     * @param Request $request
     *
     * @return Response
     */
    public function registerAction(Request $request)
    {
        $user = $this->userManager->createUser();
        $user->setEnabled(true);

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

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

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

        $form->handleRequest($request);

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

                $this->userManager->updateUser($user);

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

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

                return $response;
            }

            $event = new FormEvent($form, $request);
            $this->eventDispatcher->dispatch(FOSUserEvents::REGISTRATION_FAILURE, $event);

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

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

И трассировка стека:

Symfony\Component\Debug\Exception\ClassNotFoundException:
Attempted to load class "User" from namespace "AppBundle\Entity".
Did you forget a "use" statement for e.g. "Symfony\Component\Security\Core\User\User", "Symfony\Bridge\Doctrine\Tests\Fixtures\User" or "FOS\UserBundle\Model\User"?

  at vendor\friendsofsymfony\user-bundle\Model\UserManager.php:40
  at FOS\UserBundle\Model\UserManager->createUser()
     (vendor\friendsofsymfony\user-bundle\Controller\RegistrationController.php:59)
  at FOS\UserBundle\Controller\RegistrationController->registerAction(object(Request))
     (vendor\symfony\http-kernel\HttpKernel.php:149)
  at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), 1)
     (vendor\symfony\http-kernel\HttpKernel.php:66)
  at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1, true)
     (vendor\symfony\http-kernel\Kernel.php:190)
  at Symfony\Component\HttpKernel\Kernel->handle(object(Request))
     (public\index.php:37)

Как это исправить?

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

Domagoj 15.04.2018 09:50

Я не знаю, где находится соответствующий контроллер. Я просто следил за этой статьей (symfony.com/doc/master/bundles/FOSUserBundle/index.html), и там нет ничего о контроллере. Может быть, он создается автоматически, не могли бы вы сказать мне, где я могу найти контроллер, чтобы я мог вставить этот код сюда.

M_Idrees 15.04.2018 09:56

Ага, логика контроллера делается при импорте маршрутизации для FOS Bundle. Я полагаю, ты это сделал. Есть ли другое место, где вы использовали свой класс User?

Domagoj 15.04.2018 09:59

Под сообщением об ошибке должна быть трассировка стека, показывающая, где произошла ошибка.

Philippe-B- 15.04.2018 10:00

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

M_Idrees 15.04.2018 10:01

Да. RegistrationController, с методом действия регистрации, код размещен под вопросом.

M_Idrees 15.04.2018 10:05

Пожалуйста, не могли бы вы добавить трассировку стека к своему вопросу (если она слишком большая, по крайней мере, часть, выделенная красным).

Philippe-B- 15.04.2018 10:41

@ Philippe-B- Добавлена ​​трассировка стека.

M_Idrees 15.04.2018 10:57
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
8
760
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы используете Symfony 4, у которого по умолчанию нет пакетов, он хранит сущности в каталоге src/Entity.

Ошибка возникает из пространства имен в вашем классе User, которое вы, вероятно, скопировали. Попробуйте установить пространство имен вашего класса на App/Entity.

Я изменил пространство имен в User.php как «пространство имен App \ Entity;» ... а также в fos_user.yaml как «user_class: App \ Entity \ User» ... тогда он работает.

M_Idrees 15.04.2018 11:40

Другие вопросы по теме