jlis/judge

Judge 处理 Laravel 的功能和值切换/标记。

v1.0.4 2017-05-08 19:26 UTC

This package is auto-updated.

Last update: 2024-09-12 03:53:27 UTC


README

轻松切换/决定功能和值的简单方法。

Build Status Scrutinizer Code Quality Code Coverage StyleCI SensioLabsInsight Total Downloads

安装

首先,通过 Composer 拉取包。

composer require jlis/judge

然后,在 app/config/app.php 中包含服务提供者。

'providers' => [
    Jlis\Judge\JudgeServiceProvider::class,
];

为了方便,在此文件的底部添加一个外观别名

'aliases' => [
    'Feature' => Jlis\Judge\Feature::class,
    'Value'   => Jlis\Judge\Value::class,
];

使用发布命令将包配置复制到您的本地配置

php artisan vendor:publish

功能配置

功能配置存储在

app/config/features.php

功能 是指某种既可以是开启也可以是关闭的状态,并且应该仅用于此类切换。让我们看看

'show_memory_usage' => [
    [
        'value'   => true,
        'filters' => ['debug:true'],
    ],
],

功能名称为 show_memory_usage,如果 "debug" 投票者返回 true,则应返回 true(它检查是否启用了调试模式,请参阅 DebugVoter.php

请注意,如果没有定义其他值,功能 的默认值始终是 false

功能配置示例

没有过滤器的简单功能(注意值也可以是字符串,如 "true"、"on" 或 "1",它将被转换为布尔值

'enable_captcha' => [
    [
        'value'   => true,
    ],
],

具有多个过滤器以 AND 条件链式连接的功能

'enable_captcha' => [
    [
        'value'   => true,
        'filters' => ['env:production', 'expression_language:user==null'],
    ],
],

具有多个过滤器以 OR 条件链式连接的功能

'enable_captcha' => [
    [
        'value'   => true,
        'filters' => ['expression_language:user==null'],
    ],
    [
        'value'   => true,
        'filters' => ['env:production'],
    ],
],

具有 否定 过滤器的功能

'enable_debug_output' => [
    [
        'value'   => true,
        'filters' => ['!env:production'],
    ],
],

值配置

值配置存储在

app/config/values.php

然而, 总是返回一个值(哇),例如字符串或数字等

'greeting' => [
    [
        'value'   => 'Hello my lady!',
        'filters' => ['expression_language:user.getGender()=="female"'],
    ],
    [
        'value' => 'Hello sir.',
    ],
]

该值的名称为 greeting。如果表达式投票者返回 true,则应返回 "Hello my lady!"(假设给定的用户不为 NULL,并且它是女性)。否则,它应返回 "Hello sir."(对于性别猜测表示歉意)

ExpressionVoter.php 使用 Symfony 表达式语言来检查给定的表达式是否为 true)

值配置示例

没有过滤器的简单值

'package_price' => [
    [
        'value'   => 10.00,
    ],
],

具有一个过滤器和默认值的值

'package_price' => [
    [
        'value'   => 00.00,
        'filters' => ['expression_language:user.hasPlan("premium")'],
    ],
    [
        'value'   => 10.00,
    ],
],

具有多个过滤器以 AND 条件链式连接并具有默认值的值

'package_price' => [
    [
        'value'   => 5.00,
        'filters' => ['expression_language:user.getRegisterDays() >= 365', 'made_at_least_one_purchase'],
    ],
    [
        'value'   => 10.00,
    ],
],

投票者

实际投票者可以在此注册

app/config/judge.php

投票者包含决定给定过滤器是否应返回 true 或 false 的逻辑。这决定了功能是 开启 还是 关闭,或者值应根据其配置返回什么。

适配器

默认情况下,Judge 使用 Laravel 配置来读取功能和值。您可以选择 configrediscache 适配器。

app/config/judge.php

如果您想添加自己的适配器,请这样做。只需实现 AdapterInterface

用法

在您的控制器中,您可以这样做,例如...

$greeting = Value::decide('greeting', $this->getUser());
echo $greeting;

或者这样

if (Feature::decide('show_memory_usage', Auth::user())) {
    echo 'Memory usage: ' . memory_get_usage();
}

待定

  • 熔断器