altherius/gandalf

PHP的微型决策器

dev-master 2020-10-14 23:54 UTC

This package is auto-updated.

Last update: 2024-09-15 08:05:58 UTC


README

Gandalf

Gandalf是针对您的PHP项目的微型决策器。

安装

使用composer安装gandalf

composer require altherius/gandalf

入门指南

Gandalf使用投票系统,您可以通过实现Gandalf\Voter接口并加入自己的业务逻辑来自定义投票者。

class PostVoter implements \Gandalf\Voter
{
    public function abstains(string $permission, object $object): bool
    {
        if (!$object instanceof Post) {
            return true;        
        }

        return false;
    }

    public function vote(string $permission, object $object): bool
    {
        /* Implement your decision logic here */
        return true;
    }
}

然后在您的代码中,您可以使用决策管理器

$post = new Post();
$decisionManager = new \Gandalf\DecisionManager();
$decisionManager->decide('edit', $post);

策略

决策管理器可以根据3种不同的策略进行决策

  • STRATEGY_AFFIRMATIVE:如果至少有一个投票者表示肯定,决策管理器将做出肯定的决策。这是默认行为。
  • STRATEGY_UNANIMOUS:所有未弃权投票者都必须表示肯定。
  • STRATEGY_CONSENSUS:必须有一半以上的投票者表示肯定。

您可以在实例化DecisionManager时传递一个策略。