我正在扩展FOSAuthServerBundle,它有超映射类的实体,我需要扩展它们。让我们取一个AccessToken。当我扩展AccessToken时,我需要将其所有父属性映射到数据库中,例如$expiresAt
和$scope
,但目前还没有。很明显,有些事情我不理解或者做错了。
以下是我自己的AccessToken yml:中的内容
OSC'OAuthServerBundle'Entity'AccessToken:
type: entity
id:
id:
type: integer
id: true
generator:
strategy: AUTO
manyToOne:
client:
targetEntity: Client
user:
targetEntity: Application'Sonata'UserBundle'Entity'User
lifecycleCallbacks: { }
这是我的Accesstoken php文件:
<?php
namespace OSC'OAuthServerBundle'Entity;
use FOS'OAuthServerBundle'Document'AccessToken as BaseAccessToken;
use FOS'OAuthServerBundle'Model'ClientInterface;
use Symfony'Component'Security'Core'User'UserInterface;
class AccessToken extends BaseAccessToken
{
/**
* @var integer
*/
protected $id;
protected $client;
protected $user;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
public function getClient()
{
return $this->client;
}
public function setClient(ClientInterface $client)
{
$this->client = $client;
}
public function getUser()
{
return $this->user;
}
public function setUser(UserInterface $user)
{
$this->user = $user;
}
}
当我运行php应用程序/控制台原则:模式:更新-强制时,我的数据库中只有id、user_id和client_idxpiresAt和scope。。。
以下是我验证的内容:
我正在正确扩展FOSAuthServerBundle:
namespace OSC'OAuthServerBundle; use Symfony'Component'HttpKernel'Bundle'Bundle; class OSCOAuthServerBundle extends Bundle { public function getParent() { return 'FOSOAuthServerBundle'; } }
FOSOAuthServerBundle和OSCOAuthServerBundle在config.yml 中的条令映射列表中
- 我清空了缓存
字段没有自动映射是正常的吗?我必须在yml配置中重写它们吗?如果是的话,在我看来,它违背了映射超类的目的。也许我必须用它从映射超类继承的yml来写?
编辑1:也许这不起作用,因为基类Token不是抽象的?
解决方案:
我必须指出实体,而不是模型,正如教程告诉我的那样。这是因为在捆绑文件中的ORM映射中,映射是为实体而不是模型完成的!
<?php
namespace OSC'OAuthServerBundle'Entity;
use FOS'OAuthServerBundle'Entity'AccessToken as BaseAccessToken; //Entity here not model !
use FOS'OAuthServerBundle'Model'ClientInterface;
use Symfony'Component'Security'Core'User'UserInterface;
class AccessToken extends BaseAccessToken
{
}
您是否尝试扩展这个类:FOS'OAuthServerBundle'Entity'AccessToken as BaseAccessToken
而不是这个FOS'OAuthServerBundle'Document'AccessToken
?
您不必声明两次属性(在super和sub类中)。不要重新声明$id
、$client
和$user