pengboomouch/regulus-php

小型规则库。

dev-main 2023-03-22 09:15 UTC

This package is auto-updated.

Last update: 2024-09-22 12:30:05 UTC


README

Regulus Php 版本 - 轻量级规则组织。

安装

composer require pengboomouch/regulus-php

示例

// Define some rules and conditions
$disableRow = new \DisableRowRule(
    new SomeRowCondition(),
    new SomeSecurityCondition()
);

// Init a group and add all rules to it
$regulus = new \Regulus\Regulus();
$regulus->createGroup('row_rules');
$regulus->addRuleTo('row_rules', $disableRow);

解析所有规则

$finalResult = $regulus->resolveAll();

if ($finalResult->isFulfilled()) {
    // Do something final
    // ...
} else {
    $failedRules = $finalResult->getFailedRules();
    $failedConditions = $failedRules->getFailedConditions();
    
    // Log or do something else
}

解析特定规则

$disableRowResult = $regulus->resolveRuleIn('row_rules', DisableRowRule::class);
if ($disableRowResult->isFulfilled()) {
    // Disable the row
    // ...
}

解析特定组

$rowRuleGroupResult = $resolver->resolveGroup('row_rules');
if ($rowRuleGroupResult->isFulfilled()) {
    // Do something to the rows
    // ...
}

创建条件

定义需要满足的接受条件。

class MyCondition implements \Regulus\Interface\Condition
{
    // Inject all repositories or services you need
    public function __construct(private SomeService $someService)
    {}
    
    public function isFulfilled(): bool
    {
        // Determine if the condition is fulfilled
        // ...
        
        return true;
    }
}

创建规则

一个规则可以有多个条件。您可以自行决定何时返回失败或成功的结果。

class MyRule extends \Regulus\Core\AbstractRule
{
    // Inject all needed conditions for this rule
    public function __construct(private MyCondition $someRowCondition)
    {}

    public function resolve(): RuleResult
    {
        $succeededConditions = [];
        $failedConditions = [];
        
        // Determine if the result is fulfilled
        if(!$this->someRowCondition->isFulfilled()) {
            $isFulfilled = false;
            $failedConditions[] = $this->someRowCondition;
        } else {
            $isFulfilled = true;
            $succeededConditions[] = $this->someRowCondition;
        }

        return $this->createResult(
            $isFulfilled,
            self,
            $succeededConditions,
            $failedConditions
        );
    }
}

日志

您可以跟踪所有条件以进行调试。

    $allConditions = $disableRowResult->getAllConditions();
    
    $fulfilledConditions = $disableRowResult->getFulfilledConditions();
    
    $failedConditions = $disableRowResult->getFailedConditions();