使用mtg-sdk-php出现「mtgsdk\Card不是trait」报错求助
解决MTG SDK PHP的 "it is not a trait" 错误
问题根源
你犯了两个PHP基础用法错误:
- 模型中的错误:
mtgsdk\Card是普通类,并非PHP trait,但你在CardsAPI模型里写了use HasFactory, SDKCard;——类内部的use关键字是专门用来引入trait的,普通类不能这么用,这就是报错的直接原因。 - 控制器中的错误:
CardsAPI是Eloquent模型类,同样不是trait,你在控制器里写use CardsAPI;也是错误用法。
修复代码
修正后的模型代码
你已经通过顶部的use mtgsdk\Card as SDKCard;导入了SDK的Card类,不需要再用use把它当trait引入,只保留HasFactory这个trait即可:
namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use mtgsdk\Card as SDKCard; class CardsAPI extends Model { use HasFactory; public function getAllCards() { return SDKCard::all(); } }
修正后的控制器代码
控制器里不需要用use引入CardsAPI(你已经在顶部导入了这个模型类),直接调用静态方法即可:
namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\CardsAPI; class CardsAPIController extends Controller { public function index() { return CardsAPI::getAllCards(); } }
补充说明
你用curl能正常请求,说明SDK本身没问题,只是混淆了PHP类和trait的用法:
- 文件顶部的
use 命名空间\类名;是用来导入外部类,方便当前文件使用; - 类内部的
use TraitName;是专门用来引入trait(一种代码复用的特殊结构),普通类不能这么用。
内容的提问来源于stack exchange,提问作者Cj De Weirt
相关产品推荐
相关产品推荐

