
本文介绍如何绕过 composer,通过手动下载、调整命名空间和配置的方式,在 yii 1.x 或 yii 2.x 项目中集成 google recaptcha 验证功能。
本文介绍如何绕过 composer,通过手动下载、调整命名空间和配置的方式,在 yii 1.x 或 yii 2.x 项目中集成 google recaptcha 验证功能。
Google 官方推荐使用 Composer 管理 reCAPTCHA PHP SDK(google/recaptcha),但在某些受限环境(如老旧服务器不支持 Composer、离线部署、或企业安全策略禁用包管理器)下,你仍可手动集成 reCAPTCHA。核心思路是:获取官方 SDK 源码 → 手动引入项目 → 适配 Yii 的自动加载与命名空间规则 → 在控制器和视图中调用验证逻辑。
✅ 手动集成步骤详解
下载 SDK 源码
访问 Google reCAPTCHA PHP SDK GitHub 仓库,点击Code → Download ZIP,解压后保留src/ReCaptcha/目录(含ReCaptcha.php、Response.php、RequestMethod/等核心文件)。-
放入 Yii 项目目录
-
Yii 1.x:将
src/ReCaptcha/整体复制到protected/extensions/recaptcha/,并确保该路径可被 Yii 自动加载(在protected/config/main.php中注册):'import' => array( 'application.extensions.recaptcha.*', ), -
Yii 2.x:建议放入
common/components/recaptcha/(或backend/components/),然后在@common/components下声明命名空间(需在common/bootstrap.php或common/Component.php中补充 autoload 映射,或直接使用Yii::setAlias()+require_once)。
-
Yii 1.x:将
-
调整命名空间(关键!)
原 SDK 使用Google\ReCaptcha\*命名空间,但手动引入后无法被自动解析。你需要:- 打开
ReCaptcha.php,将顶部namespace Google\ReCaptcha;改为适配你的目录结构,例如:namespace common\components\recaptcha;
- 同步修改
Response.php和所有RequestMethod/*.php文件中的命名空间,并更新内部use语句(如use Google\ReCaptcha\Response;→use common\components\recaptcha\Response;)。
- 打开
-
在控制器中使用验证逻辑
Discussion Composer下载围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
use common\components\recaptcha\ReCaptcha; use common\components\recaptcha\RequestMethod\Post; public function actionLogin() { if (Yii::$app->request->isPost) { $recaptcha = new ReCaptcha('YOUR_SECRET_KEY', new Post()); $response = $recaptcha->verify( Yii::$app->request->post('g-recaptcha-response'), Yii::$app->request->getUserIP() ); if (!$response->isSuccess()) { Yii::$app->session->setFlash('error', '请完成人机验证'); return $this->refresh(); } // 继续登录逻辑... } return $this->render('login'); } -
在视图中嵌入 reCAPTCHA 小部件
<?php $siteKey = 'YOUR_SITE_KEY'; ?><script src="https://www.google.com/recaptcha/api.js?render=<?=%20%24siteKey%20?>"></script><script> grecaptcha.ready(function() { grecaptcha.execute('<?= $siteKey ?>', {action: 'login'}).then(function(token) { document.getElementById('recaptcha-token').value = token; }); }); </script><input type="hidden" id="recaptcha-token" name="g-recaptcha-response">
⚠️ 注意事项
-
HTTPS 强制要求:reCAPTCHA v3/v2 均需 HTTPS 环境运行(开发时可用
localhost例外); -
密钥匹配:确保
site key(前端)与secret key(后端)来自同一 reCAPTCHA 注册项(console.cloud.google.com); -
命名空间一致性:所有 SDK 类文件的命名空间必须统一且可被 Yii 正确解析,否则将抛出
Class not found错误; -
Yii 1.x 兼容性:若使用 Yii 1.x,请避免依赖 PSR-4 自动加载,改用
Yii::import()或显式require_once加载每个类; - 安全性提醒:手动维护 SDK 意味着需自行跟踪安全更新,建议定期比对官方仓库变更。
通过以上方式,你完全可以在无 Composer 环境下实现 reCAPTCHA 的可靠集成——轻量、可控,且不破坏 Yii 原有架构。










