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

Laravel中UserService调用$this->app->make报$app未定义错误如何解决

错误原因

你自定义的UserService类不属于Laravel框架自带的服务提供者类,也没有手动注入Laravel的应用容器实例作为类属性,所以$this->app本身不存在,调用时就会触发未定义属性的报错。

解决方案

根据你的使用场景可以选择以下任意一种方案:

  • 方案1:直接使用App门面调用容器
    不需要修改类结构,直接替换原有代码即可,适合临时调用的场景:
// 首先引入App门面
use Illuminate\Support\Facades\App;

// 替换原有的make调用代码
$friendRequestService = App::make(FriendRequestService::class);
  • 方案2:构造函数注入依赖(推荐)
    符合Laravel依赖注入的最佳实践,不需要手动调用容器的make方法,服务容器会自动解析注入的类实例:
namespace App\Services;
use Illuminate\Support\Facades\Auth;
use App\Services\FriendRequestService;

class UserService{
    // 声明依赖属性
    protected $friendRequestService;

    // 构造函数声明依赖,Laravel容器会自动完成实例注入
    public function __construct(FriendRequestService $friendRequestService)
    {
        $this->friendRequestService = $friendRequestService;
    }

    // 后续业务代码直接调用$this->friendRequestService即可
}
  • 方案3:手动注入应用容器实例
    如果你确实需要在类内多处调用容器实例,可以手动注入Application对象作为类属性:
namespace App\Services;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Support\Facades\Auth;

class UserService{
    protected $app;

    public function __construct(Application $app)
    {
        $this->app = $app;
    }

    // 业务代码即可正常调用$this->app->make
    public function yourBusinessMethod()
    {
        $friendRequestService = $this->app->make(FriendRequestService::class);
    }
}

如果你需要FriendRequestService为单例类,记得在app/Providers/AppServiceProvider.php的register方法中注册单例绑定:

public function register()
{
    $this->app->singleton(FriendRequestService::class, function ($app) {
        return new FriendRequestService();
    });
}

注册后不管用哪种方式调用,获取到的都是同一个FriendRequestService实例。

内容的提问来源于stack exchange,提问作者CoderTn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:15:05