Я использую 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)
Как это исправить?
Я не знаю, где находится соответствующий контроллер. Я просто следил за этой статьей (symfony.com/doc/master/bundles/FOSUserBundle/index.html), и там нет ничего о контроллере. Может быть, он создается автоматически, не могли бы вы сказать мне, где я могу найти контроллер, чтобы я мог вставить этот код сюда.
Ага, логика контроллера делается при импорте маршрутизации для FOS Bundle. Я полагаю, ты это сделал. Есть ли другое место, где вы использовали свой класс User?
Под сообщением об ошибке должна быть трассировка стека, показывающая, где произошла ошибка.
Я больше нигде не использовал класс User, я просто следил за статьей, а потом единственное, что я пытаюсь посетить страницу регистрации, и получаю эту ошибку.
Да. RegistrationController, с методом действия регистрации, код размещен под вопросом.
Пожалуйста, не могли бы вы добавить трассировку стека к своему вопросу (если она слишком большая, по крайней мере, часть, выделенная красным).
@ Philippe-B- Добавлена трассировка стека.






Вы используете Symfony 4, у которого по умолчанию нет пакетов, он хранит сущности в каталоге src/Entity.
Ошибка возникает из пространства имен в вашем классе User, которое вы, вероятно, скопировали.
Попробуйте установить пространство имен вашего класса на App/Entity.
Я изменил пространство имен в User.php как «пространство имен App \ Entity;» ... а также в fos_user.yaml как «user_class: App \ Entity \ User» ... тогда он работает.
Покажи нам свой контроллер. Я подозреваю, что вы забыли добавить инструкцию использования для пользовательского пакета поверх контроллера.