• 技术文章 >后端开发 >php教程

    yii2 $app里面如何自定义组件

    2016-07-06 13:51:47原创779
    有个微信的第三方包,通过composer安装后我想直接通过\Yii::$app->wechat来实例化这个微信类,所以我就在web.php中的components数组中配置了如下

    
        'wechat' => [
                    'class' => 'EasyWeChat\Foundation\Application',
                ],
    

    会报如下错误Missing required parameter "config" when instantiating "EasyWeChat\Foundation\Application".
    我看了下该类实例化需要传入一个数组作为配置文件,所以我有将代码改成了如下:

    
        'wechat' => [
                    'class' => 'EasyWeChat\Foundation\Application',
                    'config' => [
                        'debug'  => true,
                        'app_id' => 'your-app-id',
                        'secret' => 'you-secret',
                        'token'  => 'easywechat',
                        'log' => [
                            'level' => 'debug',
                            'file'  => '/tmp/easywechat.log', // XXX: 绝对路径!!!!
                        ],
        
                        //...
                    ],
                ],
    

    但还是一样,Missing required parameter "config" when instantiating "EasyWeChat\Foundation\Application".

    所以我想问下,想这样实例化需要参数的,这参数怎么传入?

    回复内容:

    有个微信的第三方包,通过composer安装后我想直接通过\Yii::$app->wechat来实例化这个微信类,所以我就在web.php中的components数组中配置了如下

    
        'wechat' => [
                    'class' => 'EasyWeChat\Foundation\Application',
                ],
    

    会报如下错误Missing required parameter "config" when instantiating "EasyWeChat\Foundation\Application".
    我看了下该类实例化需要传入一个数组作为配置文件,所以我有将代码改成了如下:

    
        'wechat' => [
                    'class' => 'EasyWeChat\Foundation\Application',
                    'config' => [
                        'debug'  => true,
                        'app_id' => 'your-app-id',
                        'secret' => 'you-secret',
                        'token'  => 'easywechat',
                        'log' => [
                            'level' => 'debug',
                            'file'  => '/tmp/easywechat.log', // XXX: 绝对路径!!!!
                        ],
        
                        //...
                    ],
                ],
    

    但还是一样,Missing required parameter "config" when instantiating "EasyWeChat\Foundation\Application".

    所以我想问下,想这样实例化需要参数的,这参数怎么传入?

    bootstrap.php

    
    Yii::$container->set(EasyWeChat\Foundation\Application::class, [], [
    [
      'debug'  => true,
      'app_id' => 'your-app-id',
      'secret' => 'you-secret',
      'token'  => 'easywechat',
      'log' => [
          'level' => 'debug',
          'file'  => '/tmp/easywechat.log', // XXX: 绝对路径!!!!
      ],
    
      //...
    ],
    ]);

    在配置文件中,不支持配置 construct的参数。你需要通过配置 container 来告诉Yii在实例化的时候,把配置信息注入的contruct

    给你个DEMO

     public function actionWechat() {
            
            $options = [
                'debug'     => false,
                'app_id'    => 'wx3f3ea1dd10a123445',
                'secret'    => '63005e31fd123123123123',
                'token'     => '123123123123123',
                'log' => [
                    'level' => 'debug',
                    'file'  => '/tmp/easywechat.log',
                ],
                'verify'
                // ...
            ];
            $openid = '123123123123123';
            $message = 'hello wechat';
            $app = new \EasyWeChat\Foundation\Application($options);
            $result = $app->staff->message($message)->to($openid)->send();
            
            var_dump($result);
            die;
        }

    你这样写Yii::$app->params['wechat'];试试看

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:yii2 php
    上一篇:javascript - 如何在手机上的HTML如何排版成如下格式??? 下一篇:gif图处理 - 如何用php把gif分解成一帧一帧的?用的GIFDecoder,imagick安装不上
    大前端线上培训班

    相关文章推荐

    • 分享一份PHP开发内部规范• php session有关问题 • PHP 文件上载 • thinkphp检查下传文件时是否已存在 • PHP学习系列5

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网