- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 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/
原始问题: 我的表单正确地通过了验证,但在不应该的时候提交了。 正在关注 http://formvalidation.io/examples/ajax-submit/ 查看我的控制台时,我没有在 .o
我正在使用表单验证插件:我有一个表单组,其中有 2 个输入字段,其中 1 个正在验证,一个没有。然而,当我单击“验证”时,红色边框将应用于表单组中的所有内容,即使不应对其进行验证。 有什么想法吗?
我有一个表单,其中包含需要验证的隐藏字段和 display: none 字段。我正在使用formvalidation.io尽管验证设置有效,但第一个无效字段无法自动聚焦(页面保持在原位并且不会滚动到无
我正在使用来自 FormValidator.net 的 formValidator 我有一种情况需要验证密码 和比较密码 字段,根据插件,我们可以这样做。 Password (at least
我正在使用来自 http://formvalidation.io/examples/ 的 formValidation 插件在 HTML5 表单中对表单输入执行验证。 notEmpty 等标准检查在输
我正在使用 formvalidation.io,并且同一页面上有 2 个以上的表单。 当我提交表单 1 时,如果表单 2 无效,即使表单 1 有效,提交按钮也会被禁用。 JS: $('form').f
我正在使用 formvalidation.io 并创建了一个表单,并希望使用表单元素中未包含的按钮提交表单。下面是简单的例子: Submit 按下该按钮将验证表单,但不会继续提交表单。在表单
我正在使用Jquery FormValidator 出生日期属性。 但是, 已设置为仅允许过去的日期和不超过 120 年的日期。 我只是想要再验证一次,即它也不应该允许年龄低于 18 岁。 我怎样才能
我最近从 http://formvalidation.io/ 购买并正在使用 Bootstrap FormValidation并使用 http://formvalidation.io/examples
我一直在努力让这个字段验证发挥作用。我正在使用来自 http://formvalidation.io/ 的 JS 验证进行 Bootstrap 我已经检查过 http://formvalidation
我正在使用插件 Form Validation验证表单。这个插件非常棒。 但我在验证动态生成的输入时遇到问题。 下面的代码用于动态生成输入字段 $("#countaccmp").change(func
成功时,验证器以黑色而不是绿色显示 div。如何让它以绿色显示。它不会在成功时将 has-success 类添加到 form-group div。 这是HTML Meeting Days
我正在制作一个登录和注册页面。我正在实现 form validation还。我想做这样的事情 - 当页面首先加载时,LOGIN 页面将变得active,当单击 REGISTER 时,注册页面将变得ac
我正在使用 szmnmichalowski/ZF2-NoCaptcha用于验证码验证,我有以下设置。如何使用相同的验证器来验证“验证码”表单元素,并生成并嵌入动态表单?即使输入正确的验证码,我也会收到
我在这里使用 bootstrap formvalidation.io 远程验证器: http://formvalidation.io/validators/remote/ 当发生验证错误时,有什么方法
我正在使用 Jquery formValidation 插件来验证我的表单。当我单击提交按钮时,一切正常,它会在验证后提交表单。但是,当我按键盘上的 Enter 键时,它仍然验证表单并且不提交表单,并
(!$self->param{key} or $self->param{key} ~ m/^\d+$/); 如何将上面的转换成FormValidator::Simple规则? key => [a, b
我只需要对匹配的整数进行验证。因此,我将 pattern 验证器与正则表达式一起使用(见下文)。此外,该字段不应为空,因此我添加了 required 验证器。 但是永远不会触发pattern 错误。我
我正在使用 saripaar用于表单验证。我在fragmentA中有一些edittext,验证成功后, View 将切换到fragmentB。 fragment 中的 Butterknife 和 sa
我正在使用 formvalidator.net jQuery 插件并尝试编写一个不接受数字输入的自定义验证器(“字母数字”类型允许数字)。我编写了下面的函数,但不确定要为 $el, config, l
我是一名优秀的程序员,十分优秀!