为证/rules-bundle

Symfony 的规则引擎

安装数: 3,312

依赖项: 0

建议者: 0

安全: 0

星标: 2

关注者: 4

分支: 0

开放问题: 0

类型:symfony-bundle

4.3 2019-08-14 05:13 UTC

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' 数据库表

使用 Doctrine Migrations Bundle

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 许可证 许可