Программирование, веб-кодинг

Добавляем капчу на форму. Настройка Captcha.

Используем встроенный в Yii класс для работы с капчей

Добавляем капчу на форму. Настройка Captcha.

В Yii для работы с капчей уже имеется несколько специальных классов. Поэтому можно использовать действие captcha, которое указывает на класс yii\captcha\CaptchaAction, подключив его в контроллере

class SiteController extends Controller
{
    // ...
    public function actions()
    {
        return [
            // ...
            'captcha' => [
                'class' => 'yii\captcha\CaptchaAction',
                'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
            ],
        ];
    }
    // ...
}

Теперь по url site/captcha у нас будет работать класс yii\captcha\CaptchaAction. fixedVerifyCode устанавливает код капчи для тестового режима работы.

Затем в модели формы добавляем публичное свойство для хранения значения из поля ввода кода капчи пользователем, и правило валидации этого поля

class ContactForm extends Model{
    // ...
    public $verifyCode;
    // ...
    public function rules()
    {
        return [
            // ...
            ['verifyCode', 'captcha'],
        ];
    }
    // ...
}

И в виде формы добавляем само это поле для кода проверки

<?php $form = ActiveForm::begin(['id' => 'contact-form']); ?>
    // ...
    <?= $form->field($model, 'verifyCode')->widget(Captcha::className()) ?>
    // ...
<?php ActiveForm::end(); ?>


Следует заметить, что сегодня есть роботы, распознающие текст с картинок, и поэтому стоит улучшить защиту. Если делать сложнее и запутаннее картинку с кодом, то это не понравится пользователям, которые будут сами ошибаться при вводе символов и цифр и им будет сложно распознавать изображение.

Хорошим выходом может быть простая математическая задача, которую решит реальный человек. Для этого есть удобное расширение hreitsma/yii2-simplemath-captcha