2015-11-06 45 views
2

我已经在Symfony 2中使用了一段时间的RESTful API。在创建新的实体类之前,一切似乎一直持续到昨天晚上。尝试请求访问令牌时出现错误。我收到以下错误信息:FOSOauthServerBundle __constructor错误

Catchable Fatal Error: Argument 2 passed to 
FOS\OAuthServerBundle\Event\OAuthEvent::__construct() must be an 
instance of FOS\OAuthServerBundle\Model\ClientInterface, instance of 
TeamGraduate\APIBundle\Entity\Client given, called in /Volumes/SK Repo 
1.0/Projects/Stalin Kay/Web Development/htdocs/TeamGraduate/tg-api/vendor/friendsofsymfony/oauth-server-bundle/FOS/OAuthServerBundle/Controller/AuthorizeController.php 
on line 57 and defined 500 Internal Server Error - 
ContextErrorException 

请帮忙。我的s2项目使用文档中描述的FOSOauthServerBundle。如果我重写Client中的构造函数,它会引发一个致命错误:无法调用构造函数。

编辑:

NB:只要是明确的一切工作正常,直到我生成基于​​数据库更新资料的新实体。我还使用composer update更新了项目的依赖关系。

AccessToken.php

<?php 
// src/Acme/DemoBundle/Entity/AccessToken.php 

namespace TeamGraduate\APIBundle\Entity; 

use FOS\OAuthServerBundle\Entity\AccessToken as BaseAccessToken; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
*/ 
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="User") 
    */ 
    protected $user; 
} 

AuthCode.php

<?php 
// src/Acme/DemoBundle/Entity/AuthCode.php 

namespace TeamGraduate\APIBundle\Entity; 

use FOS\OAuthServerBundle\Entity\AuthCode as BaseAuthCode; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
*/ 
class AuthCode extends BaseAuthCode 
{ 
    /** 
    * @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="User") 
    */ 
    protected $user; 
} 

Client.php

<?php 
// src/Acme/DemoBundle/Entity/Client.php 

namespace TeamGraduate\APIBundle\Entity; 

use FOS\OAuthServerBundle\Entity\Client as BaseClient; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
*/ 
class Client extends BaseClient 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    public function __construct() 
    { 
     parent::__construct(); 
    } 
} 

RefreshToken.php

<?php 
// src/Acme/DemoBundle/Entity/RefreshToken.php 

namespace TeamGraduate\APIBundle\Entity; 

use FOS\OAuthServerBundle\Entity\RefreshToken as BaseRefreshToken; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
*/ 
class RefreshToken extends BaseRefreshToken 
{ 
    /** 
    * @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="User") 
    */ 
    protected $user; 
} 
+0

你的'Client'实体是否实现'ClientInterface'?你可以发布它吗? – chapay

+0

@chapay,我没有实现ClientInterface。我使用[link](https://github.com/FriendsOfSymfony/FOSOAuthServerBundle/blob/master/Resources/doc/index.md) –

+0

扩展FOS \ OAuthServerBundle \ Model \ Client not Entity \ Client – Udan

回答

0

我相信我已经找到了解决办法。

使用下面的命令创建一个FOS目录下创建的src

php app/console doctrine:mapping:import --force TeamGraduateAPIBundle xml 

解决方案:

删除目录,都应该确定。

相关问题