Как реализовать проверку изображений с помощью ATK4

#php #atk4

#php #atk4

Вопрос:

Я разрабатываю простую веб-форму для сбора отзывов от посетителей моего сайта. Поскольку посетитель не аутентифицирован, я хотел бы реализовать этап проверки изображений для пользователей. Я искал в документации atk4 и не смог найти ни одной ссылки на подобную реализацию. Я также проверил источник at4-addons и нашел два ресурса — View_ReCaptcha и Form_Field_Verification.

Я не уверен, какому из них я должен следовать. Есть ли какой-либо пример кода или учебное пособие, на которое я могу сослаться, чтобы реализовать этап проверки изображения для моей веб-формы?

Комментарии:

1. На данный момент никаких учебных пособий нет. Он также не работает идеально, был передан из проекта. Я добавлю использование в ответ, и если вы считаете, что можете улучшить этот компонент, я был бы очень признателен.

Ответ №1:

KCapcha в Гибкий инструментарий

Это реализует очень жесткую реализацию captcha, без использования каких-либо контроллеров или представлений. Конечно, не рекомендуется писать такой код, но если у вас есть крайний срок, это последнее средство, которое вы можете использовать:

 $sec_image_field = $f->addField('line', 'sec_image', 'Security code')
    ->setNotNull()
    ->setNoSave();


$captcha_src = '/lib/kcaptcha/?' . $session_name . '=' . session_id();
$kaptcha_img = $sec_image_field->getTag('img',array('src' => $captcha_src, 'id' => 'kpt' ));
$kaptcha_img .= ' <a href="#" onclick="d=new Date(); (jQuery('#kpt')'.
   '.attr('src', '' . $captcha_src . 'amp;t='   d.getTime()));return false;">';
$kaptcha_img .= '<i class="atk-icon atk-icons-nobg atk-icon-arrows-left3"></i>';
$kaptcha_img .= ' reload</a>';
$sec_image_field->template->set('after_field', '<ins>Enther the code you see below</ins> <span>' . $kaptcha_img . '</span>'
  

Примечание: вам нужно будет загрузить и установить kcapcha в /lib/kcapcha/ с их веб-сайта.

Пример: http://agiletech.ie/contact

ReCapcha в Гибкий инструментарий

Найденная вами реализация ReCapcha намного более достойна, но не идеальна. Он вручную просматривает данные POST и просто устанавливает флаг, сообщающий вам, было ли оно введено правильно или нет. Вот пример использования:

 $rc = $form->add('View_ReCaptcha');
....
if($form->isSubmitted()){
    ...

    if(!$rc->isValid()){

        $js=$this->js->univ();

        if($r->getError()){
            $js->alert($rc->getError());
        }else{
            $js->alert('Error in capcha');
        }
        $js->execute();
    }
    ....
}
  

Примечание: вам потребуется установленная библиотека recapcha. Смотрите источник.

Улучшаем Capcha

Вероятно, лучшим способом было бы ввести новый тип поля (Form_Field_Capcha), который выполняет все это полностью автоматически. Он не должен связывать какие-либо библиотеки PHP, но будет полагаться на сторонний сервис для генерации изображений. Он также должен использовать стандартную проверку формы.

Комментарии:

1. Похоже, на данный момент мне нужно использовать решение kcaptcha, поскольку требование очень срочное. Я сообщу вам о ходе реализации.

2. Я обязательно буду вести блог на agiletoolkit.org/blog однажды появится что-то лучшее и, возможно, отредактируйте мой пост здесь.