如何重写 Yii 2.0 框架 vendor 里面的第三方包的方法 [ 2.0 版本 ]
大家好啊,请问一下哈,我现在有一个需求,项目引入了一个 composer 包,这个包是关于第三方登录的,https://github.com/xjflyttp/yii2-oauth
现在遇到一个问题,我需要重写 vendor 里面的获取微信 access_token 的方法,需要和全站的其他地方的 token 共享,所以需要存入 Redis,这就牵扯到了要改 vendor 里面的源码,一般情况下源码是不能动的,这个有办法不改动源码实现么?
文件路径是:vendor\xj\yii2-oauth\WeixinMpAuth.php
/**
* 获取公众号AccessToken
* @return MpAccessTokenResult
* @throws WeixinAccessTokenException
*/
public function getMpAccessToken()
{
try {
$result = $this->api($this->apiBaseUrl . '/cgi-bin/token', 'GET', [
'grant_type' => 'client_credential',
'appid' => $this->clientId,
'secret' => $this->clientSecret,
'openid' => $this->getOpenid(),
]);
return new MpAccessTokenResult($result);
} catch (Exception $e) {
throw new WeixinAccessTokenException($e->getMessage(), $e->getCode());
}
}
共 2 个回答
-
那就使用自己的代码仓库,fork 这个第三方的仓库,修改后在 composer.json 增加:
"repositories": [ { "type": "vcs", "url": "https://github.com/xxx/yii2-oauth" }, ]
共 1 条回复舰长的这种方式有点重,建议还是使用yii里面有一个 classMap,参看文档:https://www.yiichina.com/doc/guide/2.0/concept-autoloading#class-map
-
重写很简单的,yii里面有一个 classMap功能,可以重写vendor里面的一切(类映射表(Class Map))
参看文档:https://www.yiichina.com/doc/guide/2.0/concept-autoloading#class-map
本质是namespace文件路径替换,因此,缺点就是,您需要将原来的文件完整的复制到一个新路径做更改,必须是这个代码文件的全部内容,不能用继承 extends
在fecshop的开发中用过这个重写,还是很方便的。
PHP学院的中学生
注册时间:2018-10-23
最后登录:2024-09-23
在线时长:168小时13分
最后登录:2024-09-23
在线时长:168小时13分
- 粉丝29
- 金钱4725
- 威望30
- 积分6705