×ðÁú¿­Ê±¹ÙÍøµÇ¼

ϸ˵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µÄÏêϸÄÚÈÝ£¬¸ü¶àÇë¹Ø×¢±¾ÍøÄÚÆäËüÏà¹ØÎÄÕ£¡

ÃâÔð˵Ã÷£ºÒÔÉÏչʾÄÚÈÝȪԴÓÚÏàÖúýÌå¡¢ÆóÒµ»ú¹¹¡¢ÍøÓÑÌṩ»òÍøÂçÍøÂçÕûÀí£¬°æȨÕùÒéÓë±¾Õ¾Î޹أ¬ÎÄÕÂÉæ¼°¿´·¨Óë¿´·¨²»´ú±í×ðÁú¿­Ê±¹ÙÍøµÇ¼ÂËÓÍ»úÍø¹Ù·½Ì¬¶È£¬Çë¶ÁÕß½ö×ö²Î¿¼ ¡£±¾ÎĽӴýתÔØ£¬×ªÔØÇë˵Ã÷À´ÓÉ ¡£ÈôÄúÒÔΪ±¾ÎÄÇÖÕ¼ÁËÄúµÄ°æȨÐÅÏ¢£¬»òÄú·¢Ã÷¸ÃÄÚÈÝÓÐÈκÎÉæ¼°ÓÐÎ¥¹«µÂ¡¢Ã°·¸Ö´·¨µÈÎ¥·¨ÐÅÏ¢£¬ÇëÄúÁ¬Ã¦ÁªÏµ×ðÁú¿­Ê±¹ÙÍøµÇ¼ʵʱÐÞÕý»òɾ³ý ¡£

Ïà¹ØÐÂÎÅ

ÁªÏµ×ðÁú¿­Ê±¹ÙÍøµÇ¼

13452372176

¿É΢ÐÅÔÚÏß×Éѯ

ÊÂÇéʱ¼ä£ºÖÜÒ»ÖÁÖÜÎ壬9:30-18:30£¬½ÚãåÈÕÐÝÏ¢

QR code
ÍøÕ¾µØͼ