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

如何通过app->make()向Repository构造函数传递变量?

回答:Laravel容器中使用app()->make()传递构造参数

当然可以!你尝试的方法本身是可行的,Laravel的服务容器支持在调用make()方法时,通过第二个参数向类的构造函数传递动态参数。下面给你详细拆解具体的实现方式和注意事项:

1. 基础用法(适配你的场景)

你的EloquentTestRepository构造函数只有一个$var参数,以下两种传递方式都能生效:

  • 索引数组传递:按构造函数参数的顺序传入值

    app()->make(TestRepository::class, ['test'])->getItem(TestModel::TEST_ITEM);
    

    这里数组的第一个元素会直接传给构造函数的$var参数。

  • 关联数组传递:按参数名匹配传入值(更推荐,尤其是参数较多时)

    app()->make(TestRepository::class, ['var' => 'test'])->getItem(TestModel::TEST_ITEM);
    

    这种方式逻辑更清晰,即使后续调整构造函数的参数顺序,也不会影响参数注入的正确性。

2. 多参数场景的扩展

如果后续你的构造函数增加了混合参数(既有依赖注入的类,又有自定义参数),比如:

class EloquentTestRepository implements TestRepository {
    public function __construct(SomeService $service, $var, $anotherVar) {
        // 处理逻辑
    }
}

此时容器会自动解析SomeService的实例,你只需要传递自定义的参数即可:

app()->make(TestRepository::class, [
    'var' => 'test',
    'anotherVar' => 'another value'
]);

3. 绑定阶段预设参数的替代方案

如果你希望在绑定阶段就固定参数(无需每次调用make()时传递),可以在AppServiceProvider的register方法里修改绑定逻辑:

app()->bind(TestRepository::class, function ($app) {
    // 这里可以动态获取参数,比如从配置、请求中读取
    $var = '预设固定值';
    return new EloquentTestRepository($var);
});

这样后续直接调用app()->make(TestRepository::class)时,会自动使用预设的$var参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:16:26