webman1.5.9开启依赖注入,support\Request 注入报错

charlescc

问题描述

这里详细描述问题
support\Request 注入报错

程序代码

use support\Request;

class WalletController
{

    protected $network;
    public function __construct(Request $request)
    {
        $this->network = $request->get('network', 'xxx');

    }
    public function test(){
        return $this->network;
    }

报错信息

DI\Definition\Exception\InvalidDefinition: Entry "plugin\wallet\app\controller\WalletController" cannot be resolved: Entry "support\Request" cannot be resolved: Parameter $buffer of __construct() has no value defined or guessable
Full definition:
Object (
class = support\Request
lazy = false
__construct(
$buffer = #UNDEFINED#
)
)

截图报错信息里报错文件相关代码

这是插件里的container.php

操作系统及workerman/webman等框架组件具体版本

php7.4 ,webman1.5.9

565 1 0
1个回答

walkor

config/dependence.php 里加一句

return [
    \support\Request::class => function() {
        return request();
    }
];
  • charlescc 2023-10-22

    咦,我在插件里的config/dependence.php,加这一句没效果。但是在外面的config/dependence.php,加这一句解决了

  • walkor 2023-10-22

    因为你container.php里第三行调用的 $builder->addDefinitions(config('dependence',[]));
    应该调用 $builder->addDefinitions(config('plugin.wallet.dependence',[]));

  • charlescc 2023-10-23

    我在插件里的container/php 按你说的,修改为$builder->addDefinitions(config('plugin.wallet.dependence',[]));。然后对应插件的plugin/wallet/config/dependence.php 配置了。也不生效。 但是在控制器里,用config('plugin.wallet.dependence')是能获取到值的。

  • charlescc 2023-10-24

    @walkor 知道这是什么原因么。 插件 的container.php $builder->addDefinitions(config('plugin.wallet.dependence',[])); 会获取不到值,导致不生效。 但控制器里是可以的。

  • walkor 2023-10-24

    配置加载有先后顺序,加载config/container.php配置的时候config/dependence.php还没有载入导致的

  • charlescc 2023-10-24

    @walkor 那也就是说,插件需要开启依赖注入,只能在 主项目下的dependence 定义是么。

  • walkor 2023-10-24

    暂时只能在config/container.php里面手动include进去

  • charlescc 2023-10-24

    好的, 谢谢老大

🔝