【问题标题】:Symfony2 OAuth2 provider error UserRepositorySymfony2 OAuth2 提供程序错误 UserRepository
【发布时间】:2014-01-08 11:46:22
【问题描述】:

我是 Symfony 框架的新手,使用教程 http://blog.tankist.de/blog/2013/07/17/oauth2-explained-part-2-setting-up-oauth2-with-symfony2-using-fosoauthserverbundle/ 出现错误:

ClassNotFoundException: Attempted to load class "UserRepository" from namespace "Acme\DemoBundle\Repository" in C:\xampp\htdocs\*****\vendor\doctrine\orm\lib\Doctrine\ORM\Repository\DefaultRepositoryFactory.php line 75. Do you need to "use" it from another namespace?

我认为该代码会导致此错误:

<!-- src/Acme/DemoBundle/Resources/config/services.xml -->
<parameters>
    <parameter key="platform.entity.user.class">Acme\DemoBundle\Entity\User</parameter>
    <parameter key="platform.user.provider.class">Acme\DemoBundle\Provider\UserProvider</parameter>
</parameters>

<services>
    <service id="platform.user.manager" class="Doctrine\ORM\EntityManager"
             factory-service="doctrine" factory-method="getManagerForClass">
        <argument>%platform.entity.user.class%</argument>
    </service>

    <service id="platform.user.repository"
             class="Acme\DemoBundle\Repository\UserRepository"
             factory-service="platform.user.manager" factory-method="getRepository">
        <argument>%platform.entity.user.class%</argument>
    </service>

    <service id="platform.user.provider" class="%platform.user.provider.class%">
        <argument type="service" id="platform.user.repository" />
    </service>
</services>

<?php
  // src/Acme/DemoBundle/Provider/UserProvider.php

  namespace Acme\DemoBundle\Provider;

  use Symfony\Component\Security\Core\User\UserInterface;
  use Symfony\Component\Security\Core\User\UserProviderInterface;
  use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
  use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
  use Doctrine\Common\Persistence\ObjectRepository;
  use Doctrine\ORM\NoResultException;

  class UserProvider implements UserProviderInterface
  {
      protected $userRepository;

      public function __construct(ObjectRepository $userRepository){
          $this->userRepository = $userRepository;
      }

      public function loadUserByUsername($username)
      {
          $q = $this->userRepository
              ->createQueryBuilder('u')
              ->where('u.username = :username OR u.email = :email')
              ->setParameter('username', $username)
              ->setParameter('email', $username)
              ->getQuery();

          try {
              $user = $q->getSingleResult();
          } catch (NoResultException $e) {
              $message = sprintf(
                  'Unable to find an active admin AcmeDemoBundle:User object identified by "%s".',
                  $username
              );
              throw new UsernameNotFoundException($message, 0, $e);
          }

          return $user;
      }

      public function refreshUser(UserInterface $user)
      {
          $class = get_class($user);
          if (!$this->supportsClass($class)) {
              throw new UnsupportedUserException(
                  sprintf(
                      'Instances of "%s" are not supported.',
                      $class
                  )
              );
          }

          return $this->userRepository->find($user->getId());
      }

      public function supportsClass($class)
      {
          return $this->userRepository->getClassName() === $class
          || is_subclass_of($class, $this->userRepository->getClassName());
      }
  }

可是我看不懂……

【问题讨论】:

  • 是否使用命令行更新了您的 Doctrine shema?因为我猜实体和存储库尚未创建。所以运行 symfony 的更新命令,如下所述:Symfony2/Doctrine documentation
  • 做到了,但错误仍然存​​在...

标签: php symfony doctrine-orm oauth-2.0


【解决方案1】:

我遇到了同样的问题,这就是我所做的。

Entity文件夹中创建一个名为UserRepository.PHP的文件

里面放这段代码

命名空间登录\LoginBundle\Entity;

use Doctrine\ORM\EntityRepository;

/**
 * UserRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class UserRepository extends EntityRepository
{
}

使用正确的命名空间、包名、类名等。这对我有用,希望对你也有用。

【讨论】:

    【解决方案2】:

    正确答案如下:

    在src/Acme/DemoBundle/下新建文件夹Repository

    并使用以下代码创建新文件 UserRepository.php。

    <?php 
    namespace Acme\DemoBundle\Repository;
    
    use Doctrine\ORM\EntityRepository;
    
    /**
    * UserRepository
    *
    * This class was generated by the Doctrine ORM. Add your own custom
    * repository methods below.
    */
    class UserRepository extends EntityRepository
    {
    }
    

    这将纠正错误,如果您注意到错误,它表明在“Acme\DemoBundle\Repository”中找不到类 UserRepository。所以很简单,只需在该目录中创建该类即可。

    【讨论】:

      【解决方案3】:

      我在Symfony2 Book 中找到了一个简单的修复方法

      在项目根目录的命令行中试试这个:

      $ php app/console doctrine:generate:entities YourAppBundle
      

      这将有助于将实体置于正确的顺序并可能解决问题。它对我有用。 :)

      【讨论】:

        猜你喜欢
        • 2012-07-27
        • 2012-09-26
        • 2013-03-16
        • 1970-01-01
        • 1970-01-01
        • 2011-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多