簡體   English   中英

Zend Framework 2中InputFilter中的自定義驗證器

[英]custom validator in InputFilter in Zend Framework 2

我編寫了一個自定義類來驗證荷蘭的BSN(美國的SSN)。 該代碼可獨立運行。 但是,我無法使其用作擴展InputFilter的驗證器。 我確實在User模塊的'module.config.php'中將其包含為可調用的類。

該類的代碼如下

<?php

namespace User\Validator;
use Zend\Validator\AbstractValidator;

class CheckBSN extends AbstractValidator {

    //put your code here
    const INVALID = 'BSNInvalid';
    protected $messageTemplates = array(
        self::INVALID => "'%value%' is an invalid BSN",
    ); 

    public function isValid($value) {
        if (!ctype_digit($value)) 
        {
            $this->error(self::INVALID);
            return false;
        }
        if (strlen($value) !== 9) {
            $this->error(self::INVALID);
            return false;
        }

        $pos = 8;
        $checksum = -1 * $value[$pos];
        $weight = 2;

        for ($pos = 7; $pos >= 0; $pos--) {
            $checksum += $weight++ * $value[$pos];
         }

         if (($checksum % 11) !== 0) {
            $this->error(self::INVALID);
            return false;
         }

        return true;
    }
}

我想將此添加到UserFilter類的以下代碼中

$this->add(array(
    'name' => 'bsn',
    'required' => true,
    'filters'  => array(
        array('name' => 'StringTrim'),
        array('name' => 'StripTags'),
    ),
    'validators' => array(
        array('name' => 'StringLength',
            'options' => array(
                'encoding' => 'UTF-8', 
                'min'      => 9, 
                'max'      => 9,
            ),
        ),
    )
));

當我將類添加為第二個驗證器時,它將被忽略。 當我替換第一類時,應用程序因servicenotfoundexception崩潰。

歡迎任何幫助,我正在尋找解決方案的日子。 是的,我確實嘗試過本網站上的建議,但這些建議似乎都不適合我的情況

我認為您需要使用完全合格的驗證器類名稱。 試試這個代碼:

$this->add(array(
    'name' => 'bsn',
    'required' => true,
    'filters'  => array(
        array('name' => 'StringTrim'),
        array('name' => 'StripTags'),
    ),
    'validators' => array(
        array('name' => '\User\Validator\CheckBSN',
            'options' => array(                    
            ),
        ),
    )
));

我還建議您閱讀其中一有關ZF2的初學者 例如,我寫的“使用Zend Framework 2”一書中有一章專門介紹使用過濾器/驗證器和編寫自己的過濾器/驗證器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM