[英]Symfony2 OAuth2 provider error UserRepository
我是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());
}
}
但我無法理解......
我遇到了同樣的問題,這就是我所做的。
在Entity文件夾中創建名為UserRepository.PHP的文件
在里面,把這個代碼
命名空間Login \\ 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
{
}
使用適當的命名空間,包名稱,類名等。這對我有用,希望它也適合你。
正確的答案如下:
在以下位置創建一個新文件夾Repository:src / Acme / DemoBundle /
並使用以下代碼創建新文件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。 所以它的簡單只是在該目錄中創建該類。
我在Symfony2 Book中找到了一個簡單的修復程序
在項目根目錄的命令行中嘗試:
$ php app/console doctrine:generate:entities YourAppBundle
它將有助於使實體處於正確的順序並可能解決問題。 它對我有用。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.