38 lines
1.3 KiB
PHP
38 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace Extend\Ca;
|
|
|
|
use App\Exception\BusinessException;
|
|
use Extend\Ca_V2\CaOffline as CaOfflineV2;
|
|
use Extend\Ca_V2\CaOnline as CaOnlineV2;
|
|
|
|
class CaGatewayFactory
|
|
{
|
|
public static function makeScene(string $scene): Ca
|
|
{
|
|
$sceneConfig = config("ca.gateway.{$scene}", []);
|
|
if (!is_array($sceneConfig)) {
|
|
throw new BusinessException("不支持的CA场景配置: {$scene}");
|
|
}
|
|
|
|
$driver = (string) ($sceneConfig['driver'] ?? config('ca.gateway.driver', 'legacy'));
|
|
$mode = (string) ($sceneConfig['mode'] ?? config('ca.gateway.mode', 'online'));
|
|
|
|
return self::make($mode, $driver);
|
|
}
|
|
|
|
public static function make(?string $mode = null, ?string $driver = null): Ca
|
|
{
|
|
$resolvedMode = strtolower($mode ?: (string) config('ca.gateway.mode', 'online'));
|
|
$resolvedDriver = strtolower($driver ?: (string) config('ca.gateway.driver', 'legacy'));
|
|
|
|
return match ([$resolvedDriver, $resolvedMode]) {
|
|
['legacy', 'online'] => new CaOnline(),
|
|
['legacy', 'offline'] => new CaOffline(),
|
|
['v2', 'online'] => new CaOnlineV2(),
|
|
['v2', 'offline'] => new CaOfflineV2(),
|
|
default => throw new BusinessException("不支持的CA驱动配置: {$resolvedDriver}/{$resolvedMode}"),
|
|
};
|
|
}
|
|
}
|