回答我的問題:
我創建了一個custom repository,它可以訪問學說實體管理器。
存儲庫有一個createNewHash
方法:
class HashRepository extends EntityRepository
{
public function createNewHash()
{
$hash = new Hash();
$hash->setHash($this->_getUniqueHash());
$em = $this->getEntityManager();
$em->persist($hash);
$em->flush();
return $hash;
}
private function _getUniqueHash()
{
$hash = null;
$hashexists = true;
while ($hashexists) {
$hash = $this->_generateRandomAlphaNumericString();
if (!$hashobject = $this->findOneByHash($hash)) {
$hashexists = false;
}
}
return $hash;
}
private function _generateRandomAlphaNumericString($length=8)
{
$bits = $length/2;
return bin2hex(openssl_random_pseudo_bytes($bits));
}
}
的createNewHash()
方法,然後可以從控制器調用,並且控制器沒有與哈希生成關心自己。
編輯:聽衆是這樣做的另一種方式。
來源
2013-10-16 10:16:28
Tim
謝謝,但我知道如何生成散列 - 我需要在實體中執行數據庫讀取以查看它是否真的是唯一的。 (請參閱生成哈希中唯一性的評論:http://stackoverflow.com/a/4070171/698511) – Tim
所以你需要使用事件監聽器:http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers .html – Picoss
看着他們,但設法與一個EntityRepository(見我的答案)。有可能有幾種方法來做到這一點。謝謝您的幫助! – Tim