Laravel Pennant
发布日期 作者 Steve McDougall
Laravel Pennant 是由 Laravel 团队创建的软件包,它将随 Laravel 10 一起发布,并为您的应用程序提供功能开关。
功能开关使您能够以信心增量地推出新的应用程序功能,对新的界面设计进行 A/B 测试,补充基于主干的开发策略,等等。
这个软件包 是核心团队提供的官方软件包系列中的最新成员,这意味着我们现在拥有一个构建良好且经过充分测试的软件包,它为我们提供了一些很棒的功能。
让我们深入了解该软件包的功能,看看它能为我们提供什么。
创建一个新功能是一个简单的过程,您需要使用您的 AppServiceProvider
来定义它,如下所示
public function boot(): void{ Feature::define('beta-testers', fn (User $user) => match (true) { $user->isBetaTester() => true, default => false, });}
这是一个非常简洁且简单的方式来定义应用程序中的功能。但是,您也可以对功能使用基于类的方案
class BetaTesters{ public function resolve(User $user): mixed { return match (true) { $user->isBetaTester() => true, default => false, }; }}
浏览文档后,我发现它可以用许多激动人心的方式使用。让我们看一个文档中的例子,看看我们可以用它做什么。
class PodcastController{ public function index(Request $request): Response { return Feature::when(NewApi::class, fn () => $this->resolveNewApiResponse($request), fn () => $this->resolveLegacyApiResponse($request), ); }}
展望未来,这对于版本化的 API 非常有效 - 您可以根据用户是否有权访问来控制请求应该去哪里。让我们扩展一下这个例子。
class PodcastController{ public function __construct( private readonly RedirectAction $action, ) {} public function index(Request $request): Response { return Feature::when(BetaTester::class, fn () => $this->action->handle('v2'), fn () => $this->action->handle('v1'), ); }}
我们可以使用我们的操作,根据用户是否为测试版用户,将其重定向到正确的 API 路由。我们可以将这层更高级别地移动到中间件中,以使这个过程更简单。
class VersionMiddleware{ public function handle(Request $request, Closure $next): mixed { if (Feature::active('beta-tester')) { return new RedirectResponse( uri: 'generate the url here', ); } return $next($request); }}
可以想象,你使用 这个软件包 的方式仅受你的想象力限制。我迫不及待地想使用这个软件包,看看它能让我为应用程序添加哪些改进。
技术作家,就职于 Laravel News,开发者布道师,就职于 Treblle。API 专家,资深 PHP/Laravel 工程师。 YouTube 直播主.