php – zend2设置字段不需要丢失元素的默认输入过滤规范

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – zend2设置字段不需要丢失元素的默认输入过滤规范脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
使用Zf2,我编写了一个自定义表单元素并将其包含在一堆表单中.问题是如果我指定我不想要表单元素,我会丢失元素上的认验证器.
class MyForm extends Zend\Form\Form implements Zend\InputFilter\InputFilterPRoviderInterface
{
    public function __construct()
    {
        parent::__construct("my-form");
        $this
        ->add(array(
            'tyPE' => 'Me\Custom\EmailList','name' => 'emails','options' => array(
                'label' => _t('Email List'),),));
    }

    public function getInputfilterspecification()
    {
        return array(
            'emails' => array(
                'required' => false,));
    }
}

“EmailList”元素是一个简单的文本字段,它接受以逗号分隔的邮件地址列表.

class EmailList extends \Zend\Form\Element\Email
{
    protected $attributes = array(
        'type' => 'email','multiple' => true,);
    public function getInputSpecification()
    {
        $this->getEmailValidator()
            ->setMessage('"%value%" is not a valid email address');

        $validator = $this->getValidator();
        if ($validator instanceof explodeValidator) {
            $validator->setValueDelimITer(',');
        }

        return array(
            'name' => $this->getName(),'required' => true,'validators' => array(
                $validator,);
    }
}

因此,在我的MyForm类中,似乎通过在getInputSpecification()中包含“电子邮件”,EmailList上的认验证器被完全删除并且从未使用过.

如何将所需标志设置为false并维护元素的认验证器?

请注意,此自定义字段以多种形式使用,并且大部分时间都是必需的,这就是为什么其认规范包括required标志设置为true的原因.

谢谢

所以你希望电子邮件字段是可选的,但如果填充,它是否可以使用你的验证器?

假设我已经正确地理解了这个问题,你的代码对我来说很合适(在ZF 2.2.5上)只有一个很小的变化:

class EmailList extends \Zend\Form\Element\Email
{
    protected $attributes = array(
        'type' => 'text',// <- I changed type From 'email' to 'text'
        'multiple' => true,);

[...]

HTML type =“email”是HTML5中添加的字段类型之一,并且(至少在webkit浏览器中)这会在浏览器本身中触发一些客户端验证.浏览器对此类字段执行的操作之一是删除任何空格.然后您的表单无法验证,因为您想要(逗号空间)作为分隔符.通过将类型更改为文本,浏览器会将其视为普通的旧文本字段,ZF将处理所有验证服务器端.

如果这是问题,您可能会发现将值分隔符设置为(或根本不设置它)也可以解决问题.

如果这不能解决问题,请验证应用程序是否进入if($validator实例的ExplodeValidator){条件.您还可以尝试使用以下命令查看控制器附加到表单元素的验证器:

var_dump($form->getInputFilter()->get('emails')->getValidatorChain());

脚本宝典总结

以上是脚本宝典为你收集整理的php – zend2设置字段不需要丢失元素的默认输入过滤规范全部内容,希望文章能够帮你解决php – zend2设置字段不需要丢失元素的默认输入过滤规范所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。