У меня есть форма, которая имеет несколько действий, например Create Order & Create Quote.
В зависимости от того, какое действие кликнуто, мне нужно применить другую проверку. например 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() );