ϸ˵Laravel10ÐÂ×é¼þ£ºLaravel Pennant
±¾ÆªÎÄÕ¸ø¸÷ÈË´øÀ´Á˹ØÓÚlaravelµÄÏà¹Ø֪ʶ£¬ÆäÖÐÖ÷Òª¸ú¸÷ÈËÏÈÈÝlaravel 10µÄÐÂ×é¼þ£ºlaravel pennant£¬ÓдúÂëʾÀý£¬¸ÐÐËȤµÄÅóÙÏÂÃæÒ»ÆðÀ´¿´Ò»Ï°ɣ¬Ï£Íû¶Ô¸÷ÈËÓÐ×ÊÖú¡£
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'), ); } }
µÇ¼ºó¸´ÖÆ
ÎÒÃÇ¿ÉÒÔƾ֤Óû§ÊÇ·ñÊÇ Beta ²âÊÔÖ°Ô±£¬Ê¹ÓÃÎÒÃǵIJÙ×÷Öض¨Ïòµ½×¼È·µÄ 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); } }
µÇ¼ºó¸´ÖÆ
ÕýÈçÄã¿ÉÒÔÏëÏóµÄÄÇÑù£¬Äã¿ÉÒÔÓà ´ËÈí¼þ°ü ×öʲôֻ»áÊÜÏÞÓÚÄãµÄÏëÏóÁ¦¡£ÎÒÈç¼¢ËƿʵØÏëʹÓÃÕâ¸öÈí¼þ°ü£¬¿´¿´ËüÄÜΪÎÒµÄÓ¦ÓóÌÐòÌí¼ÓÄÄЩˢС£
ÔÎĵص㣺https://www.php.cn/link/c988c2dac3954436ac56147118fb5c73
ÒëÎĵص㣺https://www.php.cn/link/21d58309d158bcb0e3e70a3827221e7c
ÒÔÉϾÍÊÇϸ˵Laravel10ÐÂ×é¼þ£ºLaravel PennantµÄÏêϸÄÚÈÝ£¬¸ü¶àÇë¹Ø×¢±¾ÍøÄÚÆäËüÏà¹ØÎÄÕ£¡