Silverstripe conditional validation

给你一囗甜甜゛ 提交于 2019-12-07 08:19:26

问题


I have a form which has multiple actions e.g. Create Order & Create Quote.

Depending on what action is clicked I need to apply different validation. e.g. Order Ref is not required for a quote.

Is this possible within Silverstripe? If not how would I got about it?

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;
}

回答1:


To do this, you will probably need to create a custom RequiredFields subclass to conditionally set which fields are required:

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);
    }
}

You then use this in your form like:

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


来源:https://stackoverflow.com/questions/22492396/silverstripe-conditional-validation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!