fivepercent / enabled-checker
检查启用对象
Requires
- php: >=5.4
- fivepercent/exception: ~1.0
Suggests
- psr/log: Logging warning messages
This package is not auto-updated.
Last update: 2024-09-28 17:54:38 UTC
README
此包提供检查对象是否启用或禁用的功能。
例如:当您尝试为产品下单并确保其可行性(对象可以下单)时。此外,您可以检查包含该产品的类别是否可以检查或该产品所依赖的其他对象。
安装
在您的 composer.json 中添加 FivePercent/EnabledChecker
{ "require": { "fivepercent/enabled-checker": "~1.0" } }
现在通过运行以下命令告诉 composer 下载库
$ php composer.phar update fivepercent/enabled-checker
基本用法
在使用 EnabledChecker 之前,需要创建和配置检查器实例。
注意:如果需要使用多个检查器,应使用 ChainChecker
use FivePercent\Component\EnabledChecker\Checker\ChainChecker; use FivePercent\Component\EnabledChecker\EnabledChecker; $chainChecker = new ChainChecker(); $enabledChecker = new EnabledChecker($chainChecker);
当创建 EnabledChecker 时,可以将检查器添加到 ChainChecker 中。
例如,我们有一个产品和该产品的类别,其结构如下
class Category { public $enabled; } class Product { /** @var Category */ public $category; public $enabled; }
并且我们想要创建一个自定义检查器来检查产品是否启用
use FivePercent\Component\EnabledChecker\Checker\CheckerInterface; class ProductEnabledChecker implements CheckerInterface { public function isSupported($object) { return $object instanceof Product; } public function check($object) { /** @var Product $object */ if ($object->category && !$object->category->enabled) { // Category is not enabled return false; } if (!$object->enabled) { // Product is not enabled return false; } return true; } }
并将此检查器实例添加到 ChainChecker
$chainChecker->addChecker(new ProductEnabledChecker());
在此操作之后,我们可以检查产品是否启用或未启用;)
注意:如果检查器返回 false,则方法 check
抛出异常 FivePercent\Component\EnabledChecker\Exception\NotEnabledException
产品已禁用
$product = new Product(); $product->enabled = false; $checker->check($product); // Throws exception
产品已启用
$product = new Product(); $product->enabled = true; $enabledChecker->check($product); // OK
产品的类别已禁用
$product = new Product(); $product->enabled = true; $product->category = new Category(); $product->category->enabled = false; $enabledChecker->check($product); // Throws exception
产品和类别都启用
$product = new Product(); $product->enabled = true; $product->category = new Category(); $product->category->enabled = true; $enabledChecker->check($product); // All OK
注意:如果您想要抛出自定义异常,可以实现接口 FivePercent\Component\EnabledChecker\ExceptionAwareInterface
.
use FivePercent\Component\EnabledChecker\ExceptionAwareInterface; class Product implements ExceptionAwareInterface { /** @var Category */ public $category; public $enabled; public function getExceptionForNotEnabled() { if ($this->category && !$this->category->enabled) { return new \RuntimeException('Category disabled!'); } if (!$this->enabled) { return new \RuntimeException('Project disabled.'); } return null; } }
注意:在简单对象中,可以实现 FivePercent\Component\EnabledChecker\EnabledIndicateInterface
,这不需要创建检查器。