Php 为实体symfony2生成sha1字段

Php 为实体symfony2生成sha1字段,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我的实体卡包含以下字段:id、代码和令牌。 两点: 1) 我需要生成类似以下内容的“代码”: ... public function __construct(){ $date = new \DateTime(); $year = $date->format('Y'); $month = $date->format('m'); $this->codigo = $year . $month . ($this->id + 150); }

我的实体卡包含以下字段:id、代码和令牌。 两点:

1) 我需要生成类似以下内容的“代码”:

 ...
 public function __construct(){
    $date = new \DateTime();
    $year = $date->format('Y');
    $month = $date->format('m');
    $this->codigo = $year . $month . ($this->id + 150);
 }
但Id始终返回0;我尝试使用LifeCycleCallBacks。但这不管用

2) 我也需要生成一个5位数的安全令牌。 像这样:

$this->token = mt_rand(11111,99999);
但是如何将其保存在数据库中(使用sha1编码器)并检索解密后的数据

我用的是Symfony2.2

“我的所有对象”卡将在“管理”中生成。 我需要用2000张卡片填充数据库


谢谢大家

首先,您是如何尝试使用LifecycleCallbacks的?您是对的,您必须等待ID加载后才能使用它;它不会在构造函数中设置-其次,SHA1不是编码;这是一个杂烩。区别在于散列不能被解密。如果你想解密一些东西,SHA1不是一个好办法。查看Mcrypt扩展。我不知道我是否需要哈希或编码。我只需要将这个随机值存储在数据库中,稍后再获取它。我应该用哪一种?我尝试将LifecycleCallbacks与PostPersist一起使用,但Id仍然为0。也许它只有在齐平时才有价值,对吗?我想这就是我需要的为什么你也需要?是否有任何理由对该令牌进行编码?无论哪种方式,如果您需要返回原始值,则哈希不是一个选项。-为什么是后波斯特人?这将在保存对象后触发,因此即使它可能生成正确的值,它也不会实际保存。您需要在创建代码后再次刷新EntityManager,或者直接更新数据库。我发现在生命周期事件中依赖ORM实体是非常不可靠的;直接SQL访问在那里更可取。好的,那么您实际上不需要解密令牌。您所要做的就是遵循标准的密码散列过程:将您放在卡上的令牌的散列版本放入数据库。然后,当用户刮卡并向您发送令牌时,对该令牌进行散列,并将其与数据库中的散列令牌进行比较。