我正在尝试使用 FOSOAuthServerBundle 但遇到崩溃问题,崩溃消息是:
PHP Fatal error: Declaration of MP\OAuthBundle\Entity\AccessToken::setUser() must be compatible with that of FOS\OAuthServerBundle\Model\TokenInterface::setUser() in /home/bitnami..../OAuthBundle/Entity/AccessToken.php on line 13
AccessToken.class:
<?php
namespace MP\OAuthBundle\Entity;
use FOS\OAuthServerBundle\Entity\AccessToken as BaseAccessToken;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="oauth_access_tokens")
*/
class AccessToken extends BaseAccessToken
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Client")
* @ORM\JoinColumn(nullable=false)
*/
protected $client;
/**
* @ORM\ManyToOne(targetEntity="\MP\UserBundle\Entity\User")
*/
protected $user;
}
token 接口(interface)::设置用户:
/**
* @param UserInterface $user
*/
function setUser(UserInterface $user);
用户类
namespace MP\UserBundle\Entity;
use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Model\User as BaseUser;
/**
* User
*/
class User extends BaseUser
{
const ROLE_ADMIN = 'ROLE_ADMIN';
/**
* @var integer
...
我还是看不出问题出在哪里!我的用户在最后实现了 UserInterface!
有什么想法吗?
最佳答案
确保在 MP\OAuthBundle\Entity\AccessToken
use Symfony\Component\Security\Core\User\UserInterface;
use FOS\OAuthServerBundle\Model\ClientUserInterface;
您必须确保 AccessToken 实现 FOS\OAuthServerBundle\Model\TokenInterface,其中包括具有相同接口(interface)的函数声明。
现在如果你有...
function setUser(UserInterface $user)
...在 AccessToken 中尝试实现 TokenInterface 但没有使用语句 ...
... UserInterface 将转换为 MP\OAuthBundle\Entity\UserInterface
... 但它必须是 Symfony\Component\Security\Core\User\UserInterface。
结论
参数类型不匹配是 PHP 在这里提示两个函数声明不匹配的原因。
关于php - Symfony OAuth api FOSOAuthServerBundle : crash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17523012/