对扩展字段用户定义表单的验证



我已经在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 或更大。我该怎么做?

我猜(我还没有测试过这个)你最好的选择是创建一个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;
    }
...
}

最新更新