如何获得Silverstripe TableField来保存记录


How to get Silverstripe TableField to save records

我试图使用TableField来管理一个页面的相关链接列表。我有控制工作,除了它不是保存id到db(一个隐藏的字段),只是标题和url

这是正确的使用方式吗?是这样认为的。我一直在使用这个:http://doc.silverstripe.org/sapphire/en/reference/tablefield作为指南

一些代码:

static $has_many = array ( 
    'Linketys' => 'Linkety',        
);
$myTableField = new TableField( 
 'MyTableField', // fieldName 
 'Linkety', // sourceType 
    array( 
    'Title'=>'Title', 
    'URL'=>'URL' 
    ), // fieldList 
    array( 
    'Title'=>'TextField', 
    'URL'=>'TextField' 
    ), // fieldTypes 
    null, // filterField (legacy) 
    "Linkety.PageID", 
    $this->ID 
    ); 
    // add some HiddenFields thats saved with each new row 
    $myTableField->setExtraData(array( 
        'PageID' => $this->ID ? $this->ID : '$RecordID' 
    )); 
    $fields->addFieldToTab("Root.Content.Options", $myTableField);

嗯,文档似乎有点不对劲。

这是我使用表字段的方式,而不是使用extraData

Linkety.php

class Linkety extends DataObject {
    public static $db = array(
        'Title'=>'Varchar',
        'URLSegment'=>'Varchar',
    );
    public static $has_one = array(
        'Page' => 'Page'
    );
}
在Page.php

$myTableField = new TableField(
    'Linkety',
    'Linkety',
    array('Title'=>'Link title', 'URLSegment'=>'URL'),
    array('Title'=>'TextField','URLSegment'=>'TextField'),
    'PageID',
    $this->ID,
    $editExisting=true
);
$fields->addFieldToTab("Root.Content.Options", $myTableField);