Защита от спама для сайта на Yii2 используя Javascript
О защите от спама для любого сайта используя Javascript я уже писал . В этой заметке речь пойдёт о том, как вышеупомянутое решение использовать в проекте на Yii2 без лишних заморочек. Принцип тот же, за исключением некоторых нюансов, относящихся к идеологии фреймворка фреймворка Yii2 .
Защита от спама в Yii2 на примере контактной формы:
1) Добавляем в форму (файл вида):
<?= $form->field($model, 'check')->hiddenInput([ 'type' => 'hidden', 'id' => 'check', 'value' => '', ])->label(false) ?>
2) Приводим кнопку формы в такой вид:
<div class="form-group"> <?= Html::submitButton('ОТПРАВИТЬ', [ 'id' => 'btn-contact', 'class' => 'btn btn-site', 'name' => 'contact-button', 'onclick'=>"document.getElementById('check').value = 'nospam';" ]) ?> </div>
Полностью форма будет иметь следующий вид:
<?php $form = ActiveForm::begin(['id' => 'contact-form']); ?> <?= $form->field($model, 'name')->textInput(['autofocus' => true]) ?> <?= $form->field($model, 'email') ?> <?= $form->field($model, 'subject') ?> <?= $form->field($model, 'body')->textarea(['rows' => 6]) ?> <?= $form->field($model, 'verifyCode')->widget(Captcha::class, [ 'template' => '<div class="row"><div class="col-lg-6">{image}</div><div class="col-lg-6">{input}</div></div>', ]) ?> <?= $form->field($model, 'check')->hiddenInput([ 'type' => 'hidden', 'id' => 'check', 'value' => '', ])->label(false) ?> <div class="form-group"> <?= Html::submitButton('ОТПРАВИТЬ', [ 'id' => 'btn-contact', 'class' => 'btn btn-site', 'name' => 'contact-button', 'onclick'=>"document.getElementById('check').value = 'nospam';" ]) ?> </div> <?php ActiveForm::end(); ?>
В метод отправки формы (в соответствующем контроллере) добавляем ещё одно условие $_POST["ContactForm"]["check"] === 'nospam'
:
if ($form->load(Yii::$app->request->post()) && $form->validate() && $_POST["ContactForm"]["check"] === 'nospam'): // Отправляем форму return $this->refresh(); endif;