在项目开发中,我们经常会进行A/B测试,比如发布一个新的功能,会想着先让某一部分用户使用,收集一下反馈,没有太多问题了,再大范围推广。这就叫做是一个新的feature,我们就需要想办法标注一下参与这个feature测试的部分用户。
现在这种功能,我们laravel 10可以不用自己写了,官方推出了Pennant的组件,比如要定义一个新的feature,就可以在AppServiceProvider中这样:
public function boot(): void
{
Feature::define('beta-testers', fn (User $user) => match (true) {
$user->isBetaTester() => true,
default => false,
});
}
当然,你也可以单独创建class来定义feature,比如:
class BetaTesters
{
public function resolve(User $user): mixed
{
return match (true) {
$user->isBetaTester() => true,
default => false,
};
}
}
然后呢,我们就可以基于它来进行版本分流了,比如下面的代码里,我们可以让测试用户去访问v2版本的api,然后传统用户依然是走v1版本的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'),
);
}
}
当然了,这块逻辑也可以挪到middleware中,这样使用起来会更加优雅:
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 9 & 10 优雅实战入门(第三版)》这一课程的扩展文章,该课程历时6年,历经三版,是咱们国内最优雅、最正宗的laravel入门兼实战课程。
- 课程首发于2016年,当时是laravel 5.2的版本;
- 第二版发布于2018年,当时针对laravel5.7-8.*的学习;
- 第三版发布于2022年9月份,针对laravel 9.x、10.x、11.x的学习,所以如果你参加现在的课程,就相当于将来即使到laravel 11,也能继续学习,不需要额外购买,一口气锁定了laravel 9-11的学习。
** 第三版的一些升级与优势:**
- 课程内容完全重制,整体升级到了laravel 9,最近也会陆续加上laravel 10的内容
- 为大家提供了pilishen自定义的一键docker开发环境,让大家不再为环境搭建麻烦,马上我们的环境也将同时支持laravel9和10
- 使用了最新的vite前端编译环境,介绍了其原理,并进行了各种配置和优化
- 内容讲解上更加灵活、个性化,基于实战开发的需要,以问题解决为线索,用到哪里讲哪里,不再受传统的章节结构限制
- 单集内容时长基本是第二版的2倍,添加了更多的细节和原理介绍,能帮助不同层次的同学获得各自所需的知识
- 将原来第二套的前半部分内容,加到了第一套内,让同学们对一些中高级的知识点有所接触和了解
- 适当放慢了语速,方便同学们跟着敲代码,减少空格暂停的时间,基础好的同学可自行加速播放
- 增加了对各种常见错误、异常的演示和讲解,以提高同学们在实际开发中的问题解决能力
如果你总觉得没有体验到laravel的优雅,那么这套教程必看; 国内最好的入门进阶教程,以最规范简洁的方式让你真正体验laravel的优雅,日常逻辑两三行代码解决,而且全程贯穿OOP思想,高屋建瓴,让你一开始就养成高手的思维。
感兴趣的同学可以到我们的课程公开群做客咨询:109256050(公开课@pilishen.com) 已经购买过的同学,可以加入课程专门的付费群:584207847(pilishen.com教程网)