在链配置的命名空间中找不到类"应用\实体\用户"



我想添加一个带有Symfony 4的身份验证系统。我正在使用已经创建并填充的 Mssql 数据库。

这不是第一次,我正在使用它。但这是我第一次遇到问题。

我从数据库中导入了所有实体,尤其是Users实体。

我还配置了LoginFormAuthenticator.php和我的security.yml

Users.php内容:

<?php
namespace AppEntity;
use DoctrineORMMapping as ORM;
use SymfonyComponentSecurityCoreUserUserInterface;
/**
 * Users
 *
 * @ORMTable(name="USERS")
 * @ORMEntity(repositoryClass=UsersRepository::class)
 */
class Users implements UserInterface
{
    /**
     * @var int
     *
     * @ORMColumn(name="US_ID", type="integer", nullable=false)
     * @ORMId
     * @ORMGeneratedValue(strategy="IDENTITY")
     */
    private $usId;
    /**
     * @var string|null
     *
     * @ORMColumn(name="US_PRENOM", type="string", length=50, nullable=true)
     */
    private $usPrenom;
    /**
     * @var string|null
     *
     * @ORMColumn(name="US_NOM", type="string", length=50, nullable=true)
     */
    private $usNom;
    /**
     * @var string|null
     *
     * @ORMColumn(name="US_MAIL", type="string", length=100, nullable=true)
     */
    private $usMail;
    /**
     * @var string|null
     *
     * @ORMColumn(name="US_PASS", type="string", length=50, nullable=true)
     */
    private $usPass;
    /**
     * @var int|null
     *
     * @ORMColumn(name="US_NIVEAU", type="integer", nullable=true)
     */
    private $usNiveau;
    /**
     * @var DateTime|null
     *
     * @ORMColumn(name="INS_DATE", type="datetime", nullable=true)
     */
    private $insDate;
    /**
     * @var string|null
     *
     * @ORMColumn(name="INS_USER", type="string", length=100, nullable=true)
     */
    private $insUser;
    /**
     * @var DateTime|null
     *
     * @ORMColumn(name="MAJ_DATE", type="datetime", nullable=true)
     */
    private $majDate;
    /**
     * @var string|null
     *
     * @ORMColumn(name="MAJ_USER", type="string", length=100, nullable=true)
     */
    private $majUser;
    /**
     * @return int
     */
    public function getUsId(): int
    {
        return $this->usId;
    }
    /**
     * @param int $usId
     */
    public function setUsId(int $usId): void
    {
        $this->usId = $usId;
    }
    /**
     * @return string|null
     */
    public function getUsPrenom(): ?string
    {
        return $this->usPrenom;
    }
    /**
     * @param string|null $usPrenom
     */
    public function setUsPrenom(?string $usPrenom): void
    {
        $this->usPrenom = $usPrenom;
    }
    /**
     * @return string|null
     */
    public function getUsNom(): ?string
    {
        return $this->usNom;
    }
    /**
     * @param string|null $usNom
     */
    public function setUsNom(?string $usNom): void
    {
        $this->usNom = $usNom;
    }
    /**
     * @return string|null
     */
    public function getUsMail(): ?string
    {
        return $this->usMail;
    }
    /**
     * @param string|null $usMail
     */
    public function setUsMail(?string $usMail): void
    {
        $this->usMail = $usMail;
    }
    /**
     * @return string|null
     */
    public function getUsPass(): ?string
    {
        return $this->usPass;
    }
    /**
     * @param string|null $usPass
     */
    public function setUsPass(?string $usPass): void
    {
        $this->usPass = $usPass;
    }
    /**
     * @return int|null
     */
    public function getUsNiveau(): ?int
    {
        return $this->usNiveau;
    }
    /**
     * @param int|null $usNiveau
     */
    public function setUsNiveau(?int $usNiveau): void
    {
        $this->usNiveau = $usNiveau;
    }
    /**
     * @return DateTime|null
     */
    public function getInsDate(): ?DateTime
    {
        return $this->insDate;
    }
    /**
     * @param DateTime|null $insDate
     */
    public function setInsDate(?DateTime $insDate): void
    {
        $this->insDate = $insDate;
    }
    /**
     * @return string|null
     */
    public function getInsUser(): ?string
    {
        return $this->insUser;
    }
    /**
     * @param string|null $insUser
     */
    public function setInsUser(?string $insUser): void
    {
        $this->insUser = $insUser;
    }
    /**
     * @return DateTime|null
     */
    public function getMajDate(): ?DateTime
    {
        return $this->majDate;
    }
    /**
     * @param DateTime|null $majDate
     */
    public function setMajDate(?DateTime $majDate): void
    {
        $this->majDate = $majDate;
    }
    /**
     * @return string|null
     */
    public function getMajUser(): ?string
    {
        return $this->majUser;
    }
    /**
     * @param string|null $majUser
     */
    public function setMajUser(?string $majUser): void
    {
        $this->majUser = $majUser;
    }
    /**
     * Returns the roles granted to the user.
     *
     *     public function getRoles()
     *     {
     *         return ['ROLE_USER'];
     *     }
     *
     * Alternatively, the roles might be stored on a ``roles`` property,
     * and populated in any number of different ways when the user object
     * is created.
     *
     * @return (Role|string)[] The user roles
     */
    public function getRoles()
    {
        return ['ROLE_USER'];
    }
    /**
     * Returns the password used to authenticate the user.
     *
     * This should be the encoded password. On authentication, a plain-text
     * password will be salted, encoded, and then compared to this value.
     *
     * @return string The password
     */
    public function getPassword()
    {
        return $this->getUsPass();
    }
    /**
     * Returns the salt that was originally used to encode the password.
     *
     * This can return null if the password was not encoded using a salt.
     *
     * @return string|null The salt
     */
    public function getSalt()
    {
        // TODO: Implement getSalt() method.
    }
    /**
     * Returns the username used to authenticate the user.
     *
     * @return string The username
     */
    public function getUsername()
    {
        return $this->getUsMail();
    }
    /**
     * Removes sensitive data from the user.
     *
     * This is important if, at any given point, sensitive information like
     * the plain-text password is stored on this object.
     */
    public function eraseCredentials()
    {
        // TODO: Implement eraseCredentials() method.
    }
}

LoginFormAuthenticator.php内容:

<?php
namespace AppSecurity;
use AppEntityUsers;
use DoctrineORMEntityManagerInterface;
use SymfonyComponentHttpFoundationRedirectResponse;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentRoutingGeneratorUrlGeneratorInterface;
use SymfonyComponentSecurityCoreAuthenticationTokenTokenInterface;
use SymfonyComponentSecurityCoreExceptionCustomUserMessageAuthenticationException;
use SymfonyComponentSecurityCoreEncoderUserPasswordEncoderInterface;
use SymfonyComponentSecurityCoreExceptionInvalidCsrfTokenException;
use SymfonyComponentSecurityCoreSecurity;
use SymfonyComponentSecurityCoreUserUserInterface;
use SymfonyComponentSecurityCoreUserUserProviderInterface;
use SymfonyComponentSecurityCsrfCsrfToken;
use SymfonyComponentSecurityCsrfCsrfTokenManagerInterface;
use SymfonyComponentSecurityGuardAuthenticatorAbstractFormLoginAuthenticator;
use SymfonyComponentSecurityHttpUtilTargetPathTrait;
class LoginFormAuthenticator extends AbstractFormLoginAuthenticator
{
    use TargetPathTrait;
    private $urlGenerator;
    private $csrfTokenManager;
    private $passwordEncoder;
    private $entityManager;
    public function __construct(EntityManagerInterface $entityManager,UrlGeneratorInterface $urlGenerator, CsrfTokenManagerInterface $csrfTokenManager, UserPasswordEncoderInterface $passwordEncoder)
    {
        $this->urlGenerator = $urlGenerator;
        $this->csrfTokenManager = $csrfTokenManager;
        $this->passwordEncoder = $passwordEncoder;
        $this->entityManager = $entityManager;
    }
    public function supports(Request $request)
    {
        return 'app_login' === $request->attributes->get('_route')
            && $request->isMethod('POST');
    }
    public function getCredentials(Request $request)
    {
        $credentials = [
            'usMail' => $request->request->get('usMail'),
            'password' => $request->request->get('password'),
            'csrf_token' => $request->request->get('_csrf_token'),
        ];
        $request->getSession()->set(
            Security::LAST_USERNAME,
            $credentials['usMail']
        );
        return $credentials;
    }
    public function getUser($credentials, UserProviderInterface $userProvider )
    {
        $token = new CsrfToken('authenticate', $credentials['csrf_token']);
        if (!$this->csrfTokenManager->isTokenValid($token)) {
            throw new InvalidCsrfTokenException();
        }
        // Load / create our user however you need.
        // You can do this by calling the user provider, or with custom logic here.
        $user = $this->entityManager->getRepository(Users::class)->findOneBy(['usMail' => $credentials['usMail']]);

        if (!$user) {
            // fail authentication with a custom error
            throw new CustomUserMessageAuthenticationException('UsMail could not be found.');
        }
        return $user;
    }
    public function checkCredentials($credentials, UserInterface $user)
    {
        return $this->passwordEncoder->isPasswordValid($user, $credentials['password']);
    }
    public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
    {
        if ($targetPath = $this->getTargetPath($request->getSession(), $providerKey)) {
            return new RedirectResponse($targetPath);
        }
        return new RedirectResponse($this->urlGenerator->generate('home'));
    }
    protected function getLoginUrl()
    {
        return $this->urlGenerator->generate('login');
    }
}

Security.yml内容:

security:
    encoders:
        AppEntityUsers:
            algorithm:            plaintext
            ignore_case:          false
    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: ROLE_ADMIN
    providers:
        users:
            entity:
                # the class of the entity that represents users
                class: 'AppEntityUsers'
                # the property to query by - e.g. username, email, etc
                property: 'usMail'
                # optional: if you're using multiple Doctrine entity
                # managers, this option defines which one to use
                # manager_name: 'customer'
    firewalls:
        main:
            pattern: ^/
            logout:
                invalidate_session: true
                path: /logout
                target: /login
            anonymous:    true
            guard:
                authenticators:
                    - AppSecurityLoginFormAuthenticator

当我尝试登录时,我有一个例外

The class 'AppEntityUsers' was not found in the chain configured namespaces
命名空间

的目录存在问题。

如果使用多EntityManager则必须像这样配置doctrine.yaml

doctrine:
dbal:
    default_connection:
    connections:
orm:
    auto_generate_proxy_classes: '%kernel.debug%'
    naming_strategy: doctrine.orm.naming_strategy.underscore
    auto_mapping: true
    mappings:
        App:
            is_bundle: false
            type: annotation
            dir: '%kernel.project_dir%/src/Entity'
            prefix: 'AppEntity'
            alias: App

最新更新