You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 11:46:07