ryangjchandler/laravel-feature-flags

该包已被废弃,不再维护。未建议替代包。

为Laravel提供有意见的feature flags包。

v1.1.0 2022-10-12 16:06 UTC

This package is auto-updated.

Last update: 2024-04-12 21:25:46 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

此包提供了用于在您的Laravel应用程序中实现feature flags的意见化API。它支持应用程序级别的功能以及模型特定的feature flags。

安装

您可以通过Composer安装此包

composer require ryangjchandler/laravel-feature-flags

然后使用以下命令发布和运行迁移

php artisan vendor:publish --tag="feature-flags-migrations"
php artisan migrate

您可以使用以下命令发布配置文件

php artisan vendor:publish --tag="feature-flags-config"

用法

全局标志

要启用或禁用全局功能标志,分别使用Features::enable()Features::disable()方法。

use RyanChandler\LaravelFeatureFlags\Facades\Features;

Features::enable(name: 'registration');
Features::disable(name: 'registration');

要检查标志是否启用或禁用,分别使用Features::enabled()Features::disabled()方法。

use RyanChandler\LaravelFeatureFlags\Facades\Features;

if (Features::enabled(name: 'registration')) {
    // `registration` is enabled.
}

if (Features::disabled(name: 'registration')) {
    // `registration` is disabled.
}

如果您只想创建新的标志而不更新现有的标志,即在一个seeder中,可以使用Features::add()

use RyanChandler\LaravelFeatureFlags\Facades\Features;

Features::add('registration');

这将创建一个默认禁用的新标志。要默认启用标志,请向enabled参数提供布尔值。

use RyanChandler\LaravelFeatureFlags\Facades\Features;

Features::add('registration', enabled: true);

如果您只想切换标志,可以使用Features::toggle()方法。

use RyanChandler\LaravelFeatureFlags\Facades\Features;

Features::toggle(name: 'registration');

如果标志已启用,它将被禁用。如果已禁用,它将被启用。

要获取所有标志的数组,请使用Features::all()方法。这将返回一个数组,其中标志名称用作键,表示标志当前状态的布尔值作为值。

use RyanChandler\LaravelFeatureFlags\Facades\Features;

$flags = Features::all();

foreach ($flags as $name => $enabled) {
    // ...
}

模型标志

如果您想为特定模型添加feature flags,请开始实现RyanChandler\LaravelFeatureFlags\Models\Contracts\HasFeatures接口并使用RyanChandler\LaravelFeatureFlags\Models\Concerns\WithFeatures trait。以下是一个在User模型中的示例。

use RyanChandler\LaravelFeatureFlags\Models\Contracts\HasFeatures;
use RyanChandler\LaravelFeatureFlags\Models\Concerns\WithFeatures;

class User extends Authenticatable implements HasFeatures
{
    use WithFeatures;
}

该trait提供了一种符合接口的默认实现。建议您始终使用此实现,而不是编写自己的实现。

要启用、禁用或切换标志,请使用相同的Features::enable()Features::disable()Features::toggle()方法,并提供带有for名称参数的命名参数。

use RyanChandler\LaravelFeatureFlags\Facades\Features;

$user = User::first();

Features::enable('registration', for: $user);
Features::disable('registration', for: $user);
Features::toggle('registration', for: $user);

WithFeatures trait还为模型提供了一些辅助方法:enableFeature()disableFeature()toggleFeature()

Blade指令

此包还提供了一组条件Blade指令,用于使用feature flags保护您的视图。

@feature('registration')
    <a href="/register">Register now!</a>
@endfeature

您还可以使用@elsefeature@unlessfeature指令。

如果您想检查模型的feature flag,可以向指令提供命名参数。

return view('my-view', [
    'user' => User::first(),
]);
@feature('registration', for: $user)
    <a href="/register">Register now!</a>
@endfeature

中间件

此包提供了一段中间件代码,用于使用feature flags保护您的路由。

您需要将以下代码添加到您的app/Http/Kernel.php文件中。

protected $routeMiddleware = [
    'feature' => \RyanChandler\LaravelFeatureFlags\Middleware\HasFeature::class,
];

然后您可以在路由上注册中间件,如下所示

Route::get('/register', fn () => ...)->middleware('feature:registration');

中间件默认行为是使用403 Forbidden状态码终止。

您可以通过更改配置文件中middleware.behaviour的值来配置此行为。该包使用MiddlewareBehaviour枚举作为配置值。

您可以使用middleware.code配置选项更改状态码。

而不是终止,重定向

如果您更喜欢重定向而不是终止,请将middleware.behaviour设置为MiddlewareBehaviour::Redirect,并将middleware.redirect设置为您的首选重定向位置。

多个功能

如果您愿意,可以通过多个功能标志来保护您的路由。您可以在定义路由中间件时,通过逗号分隔传递的标志来实现。

Route::get('/feature', fn () => ...)->middleware('feature:verified,two-factor');

测试

composer test

更新日志

有关最近更改的更多信息,请参阅更新日志

贡献

有关详细信息,请参阅贡献指南

安全漏洞

有关如何报告安全漏洞,请审查我们的安全策略

鸣谢

许可

MIT 许可证(MIT)。有关更多信息,请参阅许可文件