Silverstripe 对扩展字段UserDefinedForm的验证

Silverstripe 对扩展字段UserDefinedForm的验证,silverstripe,Silverstripe,我在UserDefinedForm(模块userforms)上做了一个扩展。这很好,但我不知道如何在这个额外字段上设置验证。这是我代码的一部分: 类UserDefinedPaymentForm\u控制器扩展UserDefinedForm\u控制器{ 私有静态$allowed_actions=数组( “完成”, “完成”, “错误” ); 公共函数getFormFields(){ //支付字段 $supported_methods=PaymentProcessor::get_supported_m

我在
UserDefinedForm
(模块userforms)上做了一个扩展。这很好,但我不知道如何在这个额外字段上设置验证。这是我代码的一部分:

类UserDefinedPaymentForm\u控制器扩展UserDefinedForm\u控制器{
私有静态$allowed_actions=数组(
“完成”,
“完成”,
“错误”
);
公共函数getFormFields(){
//支付字段
$supported_methods=PaymentProcessor::get_supported_methods();
$gateways=array();
foreach($methodName支持的方法){
$methodConfig=PaymentFactory::get_factory_config($methodName);
$gateways[$methodName]=$methodConfig['title'];
}
$fields=parent::getFormFields();
$fields->add(新的数字字段(“PaymentAmount”,“用户定义的PaymentForm.PaymentAmount”,“PaymentAmount”));
$fields->add(新的Literalfield(“Literalfield”),t('UserDefinedPaymentForm.PAY','PAY'));
$fields->add(新建Literalfield(“Literalfield”),\t('UserDefinedPaymentForm.PAY\u INSTRUCTIONS','选择您喜欢的付款方式,然后单击PAY:

); $fields->add(新的DropdownField(“PaymentMethod”)、\t(“UserDefinedPaymentForm.PAYMENT\u METHOD”、“PAYMENT METHOD”)、$gateways); 返回$fields; } }
现在我想验证字段
PaymentAmount
,该字段的值必须为2或更多。我该怎么做呢?

我想(我还没有测试过)你最好的办法是创建
UserFormValidator
的子类,并重写
php($data)
方法。 然后,在UserDefinedPaymentForm_控制器中,您还需要覆盖
表单
方法

类PaymentAmountUserFormValidator扩展UserFormValidator{
公共函数php($data){
$result=parent::php($data);
如果($result==true){
//在此处验证您的PaymentAmount并相应地返回true或false
}
返回$result;
}
class UserDefinedPaymentForm\u控制器{
... 
公共职能表()
{
$form=UserForm::create($this);
//生成所需的字段验证器
$requiredNames=$this
->getController()
->字段()
->过滤器('Required',true)
->列(“名称”);
$validator=新的PaymentAmountUserFormValidator($requiredNames);
$form->setValidator($validator);
$this->generateConditionalJavascript();
返回$表格;
}
...
}
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;
    }
}