为证 / rules-bundle
Symfony 的规则引擎
4.3
2019-08-14 05:13 UTC
Requires
- doctrine/orm: 2.*
- symfony/expression-language: ~2.8|~3.0|~4.0
- symfony/framework-bundle: ~2.8|~3.0|~4.0
- symfony/validator: ~2.8|~3.0|~4.0
Requires (Dev)
- phpunit/phpunit: ~5
This package is auto-updated.
Last update: 2024-09-19 14:04:06 UTC
README
这个包创建了添加基本规则引擎的功能。它受到了以下文章的启发:http://jwage.com/post/76799775984/using-the-symfony-expression-language-for-a-reward
该包创建了一个包含三个元素的 Rule 实体
1. Event - the dispatched event that causes this rule to be invoked (e.g. 'user:registered')
2. Conditions - a json array of expressions. (e.g. '["data.age > 67", "data.weight > 200"]') See [https://symfony.com.cn/doc/current/components/expression_language.html](https://symfony.com.cn/doc/current/components/expression_language.html) for more on the ExpressionLanguage component.
3. Actions - a json array of events to be dispatched. (e.g. '["user:mark-as-retired", "user:send-email|Retirement"]'. Note that it is possible to send a single parameter by adding a '|' after the name of the action/event to be dispatched)
安装
首先,使用 composer 安装它
composer require vouchedfor/rules-bundle:dev-master
然后,在您的 AppKernel bundles 中添加以下内容(注意,'new DataDog\AuditBundle\DataDogAuditBundle()' 可能之前已经添加)。
// app/AppKernel.php
public function registerBundles()
{
$bundles = array(
...
new VouchedFor\AuditUiBundle\VouchedForRulesBundle(),
...
);
...
}
创建由该包使用的 'rule' 数据库表
php app/console doctrine:migrations:diff
php app/console doctrine:migrations:migrate
使用 Doctrine Schema
php app/console doctrine:schema:update --force
使用方法
创建一个继承自 VouchedFor\RulesBundle\Event\RuleEvent 的类。
将您想要监听的 events 添加为 RuleListener 服务的标签(在这个例子中,'user:mark-as-retired' 和 'user:send-email')
// app/config/services.yml
app.rule.listener:
class: VouchedFor\RulesBundle\EventListener\RuleListener
arguments:
- "@doctrine.orm.entity_manager"
- "@event_dispatcher"
tags:
- { name: kernel.event_listener, event: user:registered, method: handleEvent }
- { name: kernel.event_listener, event: user:updated, method: handleEvent }
添加一个监听器/订阅者来监听规则通过时发送的动作。例如
<?php
namespace AppBundle\EventListener;
...
class UserSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return [
'user:mark-as-retired' => 'userMarkAsRetired',
'user:send-email' => 'userSendEmail',
];
}
public function userMarkAsRequired(UserEvent $event)
{
$entity = $event->getEntity());
$entity->setStatus('retired');
...
}
public function userSendEmail(UserEvent $event)
{
$entity = $event->getEntity());
$parameter = $event->getActionParameter());
$this->sendMail($entity, $parameter); // Send email to $entity with template $parameter
...
}
许可证
Rules Bundle 可以免费使用,并使用 MIT 许可证 许可