时间: 2025年06月06日 16:23
任务: 修复请求 request_1749197896922 报错,解决RewardLogic::grantReward方法参数类型错误
在商店购买功能中出现TypeError错误:
App\Module\Game\Logics\RewardLogic::grantReward(): Argument #2 ($groupIdOrCode) must be of type App\Module\Game\Dtos\RewardGroupDto, int given, called in /var/www/html/app/Module/Game/Services/RewardService.php on line 40
通过查看日志文件 storage/logs/laravel-2025-06-06 copy 4.log,发现错误发生在商店购买流程中:
在 app/Module/Game/Logics/RewardLogic.php 第59行,grantReward 方法的参数类型声明错误:
错误的声明:
public function grantReward(int $userId, RewardGroupDto $groupIdOrCode, string $sourceType, int $sourceId): RewardResultDto
正确的声明:
public function grantReward(int $userId, $groupIdOrCode, string $sourceType, int $sourceId): RewardResultDto
app/Module/Game/Logics/RewardLogic.php修复第59行的方法签名,将第二个参数从 RewardGroupDto $groupIdOrCode 改为 $groupIdOrCode,使其能够接受 int|string 类型的参数。
修改前:
public function grantReward(int $userId,RewardGroupDto $groupIdOrCode, string $sourceType, int $sourceId): RewardResultDto
修改后:
public function grantReward(int $userId, $groupIdOrCode, string $sourceType, int $sourceId): RewardResultDto
BuyHandler.php (第83-88行)
$rewardResult = RewardService::grantReward(
$userId,
$shopItem->reward_group_id, // 这里传入的是int类型
'shop_buy',
$goodId
);
RewardService.php (第40行)
return $logic->grantReward($userId, $groupIdOrCode, $sourceType, $sourceId);
RewardLogic.php (第59行) - 修复前会在这里报错
public function grantReward(int $userId, $groupIdOrCode, string $sourceType, int $sourceId): RewardResultDto
修复后:
修复RewardLogic::grantReward方法参数类型错误
- 修复RewardLogic::grantReward方法第二个参数类型声明错误
- 将参数从RewardGroupDto类型改为int|string类型
- 解决商店购买时奖励发放的TypeError异常
- 修复request_1749197896922相关的类型错误问题
此修复影响所有调用 RewardLogic::grantReward 方法的地方,包括但不限于:
修复后这些功能都能正常传入int或string类型的奖励组标识符。