银条条件验证


Silverstripe conditional validation

我有一个表单,它有多个动作,例如创建订单&创建引用。

根据所单击的操作,我需要应用不同的验证。例如,Order Ref不需要用于报价。

这在Silverstripe中是可能的吗?如果不是,我怎么知道呢?

public function Order($request=null) {
 $form = Form::create(
    $this,
    __FUNCTION__,
    FieldList::create(
        TextField::create('Name', 'Your Full Name'),
    TextField::create('OrderRef', 'Purchase Order #')
    ),
    FieldList::create(
        LiteralField::create('Cancel', '<a class="cancel button alert">Don''t save</a>'),
        FormAction::create('saveQuote', 'Save Quote'),
        FormAction::create('saveOrder', 'Save Order')->addExtraClass('success')
    ),
    RequiredFields::create('Name', 'OrderRef')
);
return $form;
}

要做到这一点,您可能需要创建一个自定义RequiredFields子类来有条件地设置哪些字段是必需的:

class CustomValidator extends RequiredFields {
    public function php($data) {
        if($this->form->buttonClicked()->actionName() == 'saveQuote') {
            $this->addRequiredField('FieldName'); // ...
        } else {
            $this->addRequiredField('OtherFieldName'); // ...
        }
        return parent::php($data);
    }
}

然后在表单中使用,如:

$form = new Form(
    $this, 'FormName', $fields, $actions, new CustomValidator()
);