Try the beta version of the new SilverStripe documentation

For the next 2 weeks you can use the new documentation website and give us your feedback.

close

This document contains information for an outdated version (2.3) and may not be maintained any more.

If some of your projects still use this version, consider upgrading as soon as possible.

TableField

Introduction

TableField behaves in the same manner as TableListField, however allows the editing of existing and adding of new rows. The data is saved back by the surrounding form-saving (mostly EditForm->save).

See TableListField for more documentation on the base-class

Usage

Add hidden default data

Please use TableField->setExtraData() to specify additional (non-editable) data. You might use the following code that shows the Player of Team with a particular Team ID and automatically saves new Players into this Team.

In this example, you'll note that we're setting TeamID to $this->ID. This works well if you're including a TableField as an editable field on a getCMSFields() call.

$myTableField = new TableField(
  'MyTableField', // fieldName
  'Player', // sourceType
  array(
    'FirstName'=>'First Name',
    'Surname'=>'Surname'
  ), // fieldList
  array(
    'FirstName'=>'TextField',
    'Surname'=>'TextField'
  ), // fieldTypes
  null, // filterField (legacy)
  "Player.TeamID",
  $this->ID
);
// add some HiddenFields thats saved with each new row
$myTableField->setExtraData(array(
  'TeamID' => $this->ID ? $this->ID : '$RecordID'
));

The '$RecordID' value is used when building forms that create new records. It will be populated with whatever record id is created.

Row Transformation

You can apply a FormTransformation to any given field, based on a eval()ed php-rule. You can access all columns on the generated DataObjects here.

$myTF->setTransformationConditions(array(
  "PlayerName" => array(
    "rule" => '$PlayerStatus == "Retired" || $PlayerStatus == "Injured"',
    "transformation" => "performReadonlyTransformation"
  )
));

Required Fields

Due to the nested nature of this fields dataset, you can't set any required columns as usual with the RequiredFields** on the TableField-instance for this. Note: You still have to attach some form of Validator to the form to trigger any validation on this field.

Nested Table Fields

When you have TableField inside a ComplexTableField, the parent ID may not be known in your getCMSFields() method. In these cases, you can set a value to '$RecordID' in your TableField extra data, and this will be populated with the newly created record id upon save.

Known Issues

  • A TableField doesn't reload any submitted form-data if the saving is interrupted by a failed validation. After refreshing the form with the validation-errors, the TableField will be blank again.
  • You can't add visible default data to columns in a TableField, please use setExtraData

API Documentation

TableField

Comments

Comment policy: Please use comments for tips and corrections about the described functionality.
Comments are moderated, we reserve the right to remove comments that are inappropriate or are no longer relevant. Use the Silverstripe Forum to ask questions.

blog comments powered by Disqus