pengboomouch / regulus-php
小型规则库。
dev-main
2023-03-22 09:15 UTC
Requires
- php: >=8.1
Requires (Dev)
- phpunit/phpunit: ^10.0
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();