gpt4 book ai didi

php - ZF2, ZF2-NoCaptcha, FormValidation

转载 作者:可可西里 更新时间:2023-10-31 23:29:18 24 4
gpt4 key购买 nike

我正在使用 szmnmichalowski/ZF2-NoCaptcha用于验证码验证,我有以下设置。如何使用相同的验证器来验证“验证码”表单元素,并生成并嵌入动态表单?即使输入正确的验证码,我也会收到“两个给定的标记不匹配”的错误消息。但我可以使用自定义验证器对其进行验证。

Composer .json

{
"require": {
"php": ">=5.3.3",
"zendframework/zendframework": "2.3.3",
"spoonx/sxmail": "1.4.*",
"slm/queue": "0.4.*",
"szmnmichalowski/zf2-nocaptcha": "dev-master"
}
}

配置/application.config.php

return array(
'modules' => array(
'SxMail',
'SlmQueue',
'Application',
'NoCaptcha'
)
);

模块/应用程序/Module.php

<?php
namespace Application;

class Module implements AutoloaderProviderInterface, ConfigProviderInterface, BootstrapListenerInterface
{
public function getFormElementConfig()
{
return array(
'factories' => array(
'Application\Form\ContactusForm' => function ($serviceManager) {
$form = new \Application\Form\ContactusForm();
return $form;
}

)
);
}
}

module/Application/src/Application/Form/ContactusForm.php

<?php
namespace Application\Form;

use Zend\Form\Element;
use Zend\Form\Form;
use Zend\ServiceManager\ServiceLocatorAwareInterface;
use Zend\InputFilter\InputFilterAwareInterface;
use Zend\InputFilter\InputFilter;
use Zend\InputFilter\Factory as InputFactory;


class ContactusForm extends Form implements InputFilterAwareInterface, ServiceLocatorAwareInterface
{
protected $inputFilter;

public function __construct($name = null)
{
parent::__construct('ContactUs');
}

public function init()
{
$name = new \Zend\Form\Element\Text('name');
$name->setAttributes(array(
'class' => 'form-control',
'id' => 'name',
'placeholder' => 'Name',
'required' => 'Name required'
)
);

$this->add($name);

$config = $this->getServiceLocator()->getServiceLocator()->get('config');
$options = $config['application']['captcha'];

$captcha = new \NoCaptcha\Captcha\ReCaptcha($options);

$this->add(array(
'type' => 'Zend\Form\Element\Captcha',
'name' => 'captcha',
'attributes' => array(
'id' => 'recaptcha-response',
),
'options' => array(
'label' => 'Are you a bot?',
'captcha' => $captcha
)
));
}

public function getInputFilter()
{
if (!$this->inputFilter) {
$inputFilter = new InputFilter();
$factory = new InputFactory();

$inputFilter->add($factory->createInput([
'name' => 'name',
'required' => true,
'filters' => array(
array(
'name' => 'StripTags'
),
array(
'name' => 'StringTrim'
)
),
'validators' => array(
array(
'name' => 'not_empty',
"options" => array(
"messages" => array(
"isEmpty" => "Name is empty."
),
),
),
)
]));

$inputFilter->add($factory->createInput([
'name' => 'captcha',
'required' => true,
'validators' => array(
array(
'name' => 'Identical',
'options' => array(
'token' => 'g-recaptcha-response',
)
)
)
]));

$this->inputFilter = $inputFilter;
}

return $this->inputFilter;
}
}

模块/Application/src/Application/Controller/IndexController.php

<?php
namespace Application\Controller;

use Application\Form\ContactusForm;

class IndexController extends ApplicationController
{
public function __construct(
\Application\Service\EmailService $emailService
) {
$this->emailService = $emailService;
}

public function indexAction()
{
$contactUsForm = $this->getServiceLocator()->get('FormElementManager')->get('Application\Form\ContactusForm');
$contactUsForm->setTranslator($this->translator);

$request = $this->getRequest();

if ($request->isPost()) {

$postData = $request->getPost();
$contactUsForm->setData($postData);

if ($contactUsForm->isValid()) {
$emailJob = $this->getJobManager()->get('Application\Job\Email');
$emailJob->setContent(
//content
);
$this->getDoctrineQueue()->push($emailJob);

$successMessage = $this->translator->translate('Message successfully sent.');
$this->flashMessenger()->addSuccessMessage($successMessage);
$this->redirect()->toRoute('home');

} else {
$errorMessage = $this->translator->translate('Message failed. Please try again');
$this->flashMessenger()->addErrorMessage($errorMessage);
}
}

$viewModel = new ViewModel();
$viewModel->setVariable('form', $contactUsForm);

return $viewModel;
}
}

最佳答案

看起来工作量很大。试试这个: https://github.com/Saeven/zf2-circlical-recaptcha

披露:我是作者,但至少可以保证它有效。

关于php - ZF2, ZF2-NoCaptcha, FormValidation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34065200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com