2016-08-10 2 views
0

Я пытаюсь добавить captcha к форме входа.Как добавить капчу в приложение Yii-2?

Моя среда:

  • Yii 2
  • PHP 5.4.45 TS
  • IIS 10.0
  • Окна 10

В login.php, LoginForm.php и SiteController.php я добавил следующее (показаны только соответствующие детали):

бэкенд \ Views \ сайт \ 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, 
     ], 
    ]; 
} 

I загружены и установлены ImageMagick-7.0.2-Q16

Как описано here Скачайте php_imagick-3.4.1-5.4-ts-vc9-x86.zip и вытащите php_imagick.dll оттуда. Затем добавляют 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. Я проверил, что этот пакет установлен.

Как добавить капчу в приложение Yii-2? Я пробовал разные комбинации ImageMagick и php_imagick.dll, но ничего не работает.

Я был бы очень признателен за информацию. Спасибо всем.

+1

Если вы открыты для альтернативных решений, взгляните на https://www.google.com/recaptcha/intro/index.html – Jason

+0

Большое спасибо за ваш быстрый комментарий! Да, я открыт для альтернативных решений. Я попробую. –

+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

Некоторые объяснения могут улучшить ответ и помочь будущим читателям. –

+1

Код прямолинейный. Я просто предоставил шаблон с изображением captcha, обновленное изображение captcha (путь этого изображения должен быть предоставлен со стороны разработчика), метка (Verification Код) и поле ввода для текста. –

+0

Выглядит хорошо. Поместите этот комментарий в свой ответ, я повышу его –

Смежные вопросы