2014-03-18 129 views
4

我有一個表單有多個動作,例如創建訂單&創建報價。銀條紋條件驗證

根據點擊的操作,我需要應用不同的驗證。例如訂單參考不需要報價。

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

@ 3dgoo服務器端驗證,我正在使用silverstripe表單類。添加了我的表單的示例 – Mediabeastnz

回答

5

要做到這一點,你可能需要創建一個自定義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() 
);