我正在创建一个特性,我想将它插入到我的一些条令实体类中。该特性基本上允许使用基于实体id(主键)的Hashids PHP库创建slug属性。
我已经包括了所需的属性&getters/ssetters以及特性的postPersist()
方法,但我现在想知道如何在postPersist()
方法中重新保存/更新/持久化更改?
任何帮助或指导都会很棒。
SlugTrait
trait Slug
{
/**
* @ORM'Column(type="string")
*/
private $slug;
/**
* @ORM'PostPersist
*/
public function postPersist()
{
$this->slug = (new SlugCreator())->encode($this->id);
// Save/persist this newly created slug...?
}
public function getSlug()
{
return $this->slug;
}
public function setSlug($slug)
{
$this->slug = $slug;
}
}
经过一番尝试和错误之后,我发现了如何保持更新/更改。当我使用Laravel时,我刚刚从IoC容器中解析了实体管理器,然后用它来保持更新的段塞字段,就像这样(你也可以手动更新实体管理器):
trait Slug
{
/**
* @ORM'Column(type="string")
*/
protected $slug;
/**
* @ORM'PostPersist
*/
public function postPersist()
{
$this->slug = (new SlugCreator())->encode($this->id);
// Save/persist this newly created slug.
// Note: We must add the top level class annotation
// '@ORM'HasLifecycleCallbacks()' to any Entity that
// uses this trait.
$entityManager = App::make('Doctrine'ORM'EntityManagerInterface'); // or new up the em "new EntityManager(...);
$entityManager->persist($this);
$entityManager->flush();
}
public function getSlug()
{
return $this->slug;
}
public function setSlug($slug)
{
$this->slug = $slug;
}
}