【问题标题】:Validation on extended fields UserDefinedForm验证扩展字段 UserDefinedForm
【发布时间】:2015-01-17 11:42:11
【问题描述】:

我已经对UserDefinedForm(模块用户表单)进行了扩展。这很好用,但我不知道如何在这个额外的字段上设置验证。这是我的代码(一部分):

class UserDefinedPaymentForm_Controller extends UserDefinedForm_Controller {
    private static $allowed_actions = array(
        "finished",
        "complete",
        "error"
    );

    public function getFormFields() {
        //Payment fields
        $supported_methods = PaymentProcessor::get_supported_methods();

        $gateways = array();
        foreach ($supported_methods as $methodName) {
            $methodConfig = PaymentFactory::get_factory_config($methodName);
            $gateways[$methodName] = $methodConfig['title'];
        }


        $fields = parent::getFormFields();

        $fields->add(new NumericField("PaymentAmount", _t('UserDefinedPaymentForm.PAYMENT_AMOUNT', 'Payment Amount')));
        $fields->add(new Literalfield("literalfield", _t('UserDefinedPaymentForm.PAY', '<h2>Pay</h2>')));
        $fields->add(new Literalfield("literalfield", _t('UserDefinedPaymentForm.PAY_INSTRUCTIONS', '<p>Choose your prefered payment method and click Pay:</p>')));
        $fields->add(new DropdownField("PaymentMethod", _t('UserDefinedPaymentForm.PAYMENT_METHOD', 'Payment Method'), $gateways));

        return $fields;
    }
}

现在我要验证字段PaymentAmount,该字段的值必须为2 或更大。我该怎么做?

【问题讨论】:

    标签: silverstripe


    【解决方案1】:

    我猜(我还没有测试过)你最好的办法是创建一个UserFormValidator 的子类并覆盖php($data) 方法。 然后,在您的 UserDefinedPaymentForm_Controller 中,您还需要覆盖 Form 方法。

    class PaymentAmountUserFormValidator extends UserFormValidator {
    
        public function php($data) {
            $result = parent::php($data);
            if ($result === true) {
                 // verify your PaymentAmount here and return true or false, accordingly
            }
            return $result;
        }
    
    class UserDefinedPaymentForm_Controller {
     ... 
        public function Form()
        {
            $form = UserForm::create($this);
    
            // Generate required field validator
            $requiredNames = $this
                ->getController()
                ->Fields()
                ->filter('Required', true)
                ->column('Name');
    
            $validator = new PaymentAmountUserFormValidator($requiredNames);
            $form->setValidator($validator);
            $this->generateConditionalJavascript();
            return $form;
        }
    
    ...
    
    }
    

    【讨论】:

      猜你喜欢
      • 2019-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 2015-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多