我正在尝试将验证码添加到登录表单。
我的环境:
在login.php
,LoginForm.php
和SiteController.php
我添加了以下内容(仅显示相关部分):
后端\视图\站点\ login.php中:
use yii\captcha\Captcha;
...
<?= $form->field($model, 'captcha')->widget(Captcha::className()) ?>
...
常见\模型\ LoginForm.php:
...
public $captcha;
...
public function rules()
{
return [
...
[['username', 'password', 'captcha'], 'required'],
['captcha', 'captcha'],
];
}
后端\控制器\ SiteController.php:
public function actions()
{
return [
...
'captcha' => [
'class' => 'yii\captcha\CaptchaAction',
// 'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
],
];
}
我已下载并安装了ImageMagick-7.0.2-Q16
如上所述here我已经下载了php_imagick-3.4.1-5.4-ts-vc9-x86.zip并从中提取php_imagick.dll。然后在/php/ext/
在php.ini
我添加了以下内容:
...
[PHP_IMAGICK]
extension=php_imagick.dll
...
然后重新启动IIS,但不显示验证码,我在日志中看到以下内容:
2016-08-10 07:28:21 [127.0.0.1][-][h1a65krn8scqc9auk56flmesi6][error][yii\base\InvalidConfigException] exception 'yii\base\InvalidConfigException' with message 'Either GD PHP extension with FreeType support or ImageMagick PHP extension with PNG support is required.' in C:\projects\aisnew\vendor\yiisoft\yii2\captcha\Captcha.php:180
重新启动操作系统后:
2016-08-10 07:01:22 [127.0.0.1][-][h1a65krn8scqc9auk56flmesi6][error][yii\base\ErrorException:32] exception 'yii\base\ErrorException' with message 'PHP Startup: ' in Unknown:0
我在某处读到最新版本正在使用Windows 10但需要安装Visual C ++ 2013 Redistributable Package。我检查了这个软件包是否已安装。
如何在Yii-2应用程序中添加验证码?我尝试了ImageMagick和php_imagick.dll的不同组合,但没有任何效果。
我将非常感谢这些信息。谢谢大家。
答案 0 :(得分:2)
我认为这应该有用
<?= $form->field($model, 'captcha')->widget(Captcha::className(),
['template' => '<div class="captcha_img">{image}</div>'
. '<a class="refreshcaptcha" href="#">'
. Html::img('/images/imageName.png',[]).'</a>'
. 'Verification Code{input}',
])->label(FALSE); ?>
我所做的是,添加了一个模板,其中包含验证码图像,刷新验证码图像(提供合适的路径),字段标签和文本输入字段。
答案 1 :(得分:2)
我刚刚为自己的Yii2网站设置了自定义代码。这是一个基于文本的验证码。检查它是否可以帮助您。 在模型中:-
<form action="/profile" method="post" enctype="multipart/form-data">
<input type="file" name="avatar" />
</form>
......
public $captcha;
public $recaptcha;
在此行的控制器中,在定义$ model之后创建和更新操作:-
[['name', 'captcha','recaptcha'], 'required'],
['recaptcha', 'compare', 'compareAttribute' => 'captcha', 'operator' => '=='],
然后在视图部分中添加以下行:-
$model->captcha = rand(11111,99999);
答案 2 :(得分:0)
我使用了这个链接,我的问题解决了。 https://github.com/yiisoft/yii2/issues/6392 您无需执行以下操作。 我已经下载并安装了 ImageMagick-7.0.2-Q16
如此处所述,我已下载 php_imagick-3.4.1-5.4-ts-vc9-x86.zip 并从中提取 php_imagick.dll。然后在/php/ext/
中添加php_imagick.dll在 php.ini 中,我添加了以下内容:
... [PHP_IMAGICK] 扩展名 = php_imagick.dll ...