Das Hinzufügen eines Captcha zum Anmeldeformular ist ganz einfach und kann in drei Schritten erfolgen:
- In models/LoginForm.php müssen Sie Captcha-Felder und Validierungsregeln hinzufügen.
- In views/site/login.php müssen Sie ein Captcha-Feld einfügen.
- In controllers/SiteController.php müssen Sie die Captcha-Aktion hinzufügen.
In diesem Tutorial möchte ich Ihnen zeigen, wie Sie ein Captcha im Login-Formular erstellen können, aber Sie können ein Captcha zu jedem Formular hinzufügen, indem Sie diesen Schritten folgen.
Weitere interessante Artikel
1. Captcha-Felder und Validierungsregeln zu models/LoginForm.php hinzufügen
Zunächst einmal müssen Sie das Anmeldeformular wie oben beschrieben ändern. Dann müssen Sie eine öffentliche Eigenschaft namens verifyCode und die zugehörigen Validierungsregeln hinzufügen.
class LoginForm extends Model { ............. ............. public $verifyCode; ............. public function rules() { return [ ............. ............. ['verifyCode', 'required', 'when'=>function(){return $this->loginFailed;}], ['verifyCode', 'captcha', 'when'=>function(){return $this->loginFailed;}], ............. ............. ]; } public function validatePassword($attribute, $params) { if (!$this->hasErrors()) { ............. if (!$user || !$user->validatePassword($this->password)) { Yii::$app->session->set('_loginAttempts', Yii::$app->session->get('_loginAttempts', 0)+1); ............. } } } //Check number login failed public function getLoginFailed() { return Yii::$app->session->get('_loginAttempts', 0) > 3; } ............. ............. }
2. Widgets zu views/site/login.php hinzufügen
............. ............. <div class="site-login"> ............. ............. <div class="row"> <div class="col-lg-5"> <?php $form = ActiveForm::begin(['id' => 'login-form']); ?> ............. ............. <?php if($model->loginFailed){ echo $form->field($model, 'verifyCode')->widget(\yii\captcha\Captcha::class); } ?> ............. ............. <?php ActiveForm::end(); ?> </div> </div> </div>
3. Hinzufügen einer Aktion zum Controller/SiteController.php
Damit Captchas funktionieren, müssen Sie eine Action Captcha zu controllers/SiteController.php hinzufügen. Vielleicht existiert die Aktion bereits, weil die Standardvorlage Yii2 sie automatisch hinzufügt.
............. ............. class SiteController extends Controller { ............. ............. public function actions() { return [ ............. ............. 'captcha' => [ 'class' => 'yii\captcha\CaptchaAction', ], ............. ............. ]; } ............. ............. }