【问题标题】:Silverstripe conditional validationSilverstripe 条件验证
【发布时间】:2014-04-24 21:40:27
【问题描述】:

我有一个包含多个操作的表单,例如创建订单并创建报价。

根据单击的操作,我需要应用不同的验证。例如报价不需要订单参考。

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

【问题讨论】:

  • @3dgoo 服务器端验证,我正在使用 silverstripe 表单类。添加了我的表单示例

标签: php validation conditional silverstripe


【解决方案1】:

为此,您可能需要创建一个自定义 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()
);

【讨论】:

    猜你喜欢
    • 2015-07-30
    • 2016-01-24
    • 1970-01-01
    • 2011-02-25
    • 2014-07-02
    • 2017-03-24
    • 2012-12-30
    • 2012-10-12
    • 2011-01-06
    相关资源
    最近更新 更多