我有 slugify 方法,每次更改实体类的标题属性时都会对其进行 slugify 处理。
所以我把这个方法放在实体类中并像这样调用它:
public function setTitle($t){
$this->title = $t;
$this->slugTitle = $this->slugify($t);
}
它对我来说很好用,但如果我有不止一堂课使用slugify方法的我应该把这个方法放在所有的方法中,这是代码重复。
所以我该怎么做?如果使用辅助类,我不能像上面的方法一样使用 slugify() :-(。
您可以使用Doctrine 事件监听器/订阅者 http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html倾听实体的变化并采取行动。
namespace Acme\DemoBundle\EventListener;
use Doctrine\ORM\Event\LifecycleEventArgs;
class SlugifyListener
{
public function preUpdate(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
$entityManager = $args->getEntityManager();
// do something with $entity...
}
}
services.xml:
<service id="my.listener" class="Acme\DemoBundle\EventListener\SlugifyListener">
<tag name="doctrine.event_listener" event="preUpdate" />
</service>
但是在这种情况下,您最好看一下学说扩展包 https://github.com/stof/StofDoctrineExtensionsBundle。它提供了一个 Sluggable 扩展,可以为您完成此操作,而不是重新发明轮子。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)