
В 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
19 июня 2016, Программирование, веб-кодинг / Метки: captcha

