knplabs / rad-doctrine-event
此包已被废弃,不再维护。未建议替代包。
从 Symfony DIC 访问 doctrine 事件。
v2.2.0
2017-09-21 08:24 UTC
Requires
- php: ~7.0
- doctrine/inflector: ~1.0
- doctrine/orm: ~2.4
- symfony/config: ~2.0||~3.0
- symfony/dependency-injection: ~2.0||~3.0
- symfony/http-kernel: ~2.0||~3.0
Requires (Dev)
- knplabs/phpspec-welldone-extension: dev-master@dev
- phpspec/phpspec: ~2.4
This package is auto-updated.
Last update: 2022-09-23 13:37:18 UTC
README
遗憾的是,我们决定不再维护此项目 anymore (查看原因)。如果您想将其他包标记为替代品,请发送电子邮件至 hello@knplabs.com。
快速应用开发:Doctrine 事件
从 Symfony DIC 访问您的 doctrine 事件。
官方维护者
安装
composer require knplabs/rad-doctrine-event ~2.1
和 Symfony 一起
class AppKernel { function registerBundles() { $bundles = array( //... new Knp\Rad\DoctrineEvent\Bundle\DoctrineEventBundle(), //... ); //... return $bundles; } }
使用
上下文
假设您有以下实体
namespace App\Entity; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity */ class User { //... }
之前
为了将 doctrine 事件插入该实体,我们通常会这样做
namespace App\EventListener; use App\Entity\User; use Doctrine\ORM\Event\LifecycleEventArgs; class UserListener { public function prePersist(LifecycleEventArgs $args) { $entity = $args->getEntity(); if (false === $entity instanceof User) { return; } // Some stuff } }
#services.yml services: app.event_listener.user_listener: class: App\EventListener\UserListener tags: - { name: doctrine.event_listener, event: pre_persist, method: prePersist }
之后
但使用 KnpRadDoctrineEvent,您需要
namespace App\EventListener; use Knp\Rad\DoctrineEvent\Event\DoctrineEvent; class UserListener { public function prePersist(DoctrineEvent $event) { $entity = $event->getEntity(); // Some stuff } }
#services.yml services: app.event_listener.user_listener: class: App\EventListener\UserListener tags: - { name: kernel.event_listener, event: app.entity.user.pre_persist, method: prePersist }
继承
上下文
假设您有一个扩展另一个实体的实体
namespace App\Entity; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\InheritanceType("JOINED") * @ORM\DiscriminatorColumn(name="type", type="string") * @ORM\DiscriminatorMap({"page" = "App\Entity\Customer"}) */ class User { //... }
namespace App\Entity; use App\Entity\User; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity */ class Customer extends User { //... }
事件
父实体的事件在子实体之前分发
对于 | 第一个事件 | 第二个事件 |
---|---|---|
pre_persist | app.entity.user.pre_persist | app.entity.customer.pre_persist |
post_update | app.entity.user.pre_update | app.entity.customer.pre_update |
... |
终止
每个 post
(post_persist
, post_update
, post_remove
, post_load
) 事件在 kernel.terminate
事件期间也会重新分发。
事件 | 终止事件 |
---|---|
app.entity.user.post_persist | app.entity.user.post_persist_terminate |
app.entity.user.post_update | app.entity.user.post_update_terminate |
app.entity.user.post_remove | app.entity.user.post_remove_terminate |
app.entity.user.post_load | app.entity.user.post_load_terminate |
配置
您可以将事件重新分发的限制设置为特定实体。
只需遵循以下配置
knp_rad_doctrine_event: entities: - MyBundle\Entity\User
然后事件将仅针对实体 MyBundle\Entity\User
分发。