Silverstripe 扩展成员类仍在尝试写入成员表
我正在扩展成员表以包括基本地址详细信息 设置:Silverstripe 扩展成员类仍在尝试写入成员表,silverstripe,Silverstripe,我正在扩展成员表以包括基本地址详细信息 设置: class ClientMember extends Member { private static $db = array( "AddressLine1" => "Varchar(255)", "AddressLine2" => "Varchar(255)", "Country" => "Varchar(50)", "State"
class ClientMember extends Member {
private static $db = array(
"AddressLine1" => "Varchar(255)",
"AddressLine2" => "Varchar(255)",
"Country" => "Varchar(50)",
"State" => "Varchar(50)",
"Postcode" => "Int(4)"
);
public function getCMSFields() {
$fields = parent::getCMSFields();
$addressLine1 = new TextField('AddressLine1', 'Address line 1', null, 255);
$addressLine2 = new TextField('AddressLine2', 'Address line 2', null, 255);
$country = new CountryDropdownField('Country', 'Country', null, 'AU');
$state = new DropdownField('State', 'State', array('vic' => 'Victoria', 'sa' => 'South Australia', 'wa' => 'Western Australia'));
$postcode = new NumericField('Postcode', 'Postcode', null, 4);
$fields->addFieldsToTab(
'Root.Address',
array(
$addressLine1,
$addressLine2,
$country,
$state,
$postcode
)
);
return $fields;
}
}
然后我告诉SilverStripe在YAML配置中使用新的类名称ClientMember
Injector:
Member:
class: ClientMember
问题:
class ClientMember extends Member {
private static $db = array(
"AddressLine1" => "Varchar(255)",
"AddressLine2" => "Varchar(255)",
"Country" => "Varchar(50)",
"State" => "Varchar(50)",
"Postcode" => "Int(4)"
);
public function getCMSFields() {
$fields = parent::getCMSFields();
$addressLine1 = new TextField('AddressLine1', 'Address line 1', null, 255);
$addressLine2 = new TextField('AddressLine2', 'Address line 2', null, 255);
$country = new CountryDropdownField('Country', 'Country', null, 'AU');
$state = new DropdownField('State', 'State', array('vic' => 'Victoria', 'sa' => 'South Australia', 'wa' => 'Western Australia'));
$postcode = new NumericField('Postcode', 'Postcode', null, 4);
$fields->addFieldsToTab(
'Root.Address',
array(
$addressLine1,
$addressLine2,
$country,
$state,
$postcode
)
);
return $fields;
}
}
然后,我可以通过CMS和新地址选项卡创建新的“客户成员”,所有字段都按预期工作。保存时,出现以下错误:
字符串“”无法运行查询:更新“成员”集“AddressLine1”=
'测试',“地址行2”='测试',“国家”='非盟',“州”='维克',
“邮政编码”=1212,“最后编辑”=“2015-07-10 12:43:58”,其中“ID”=
十,
“字段列表”中的未知列“AddressLine1”(长度=245)
注意,它试图将新字段写入Member
表,而不是扩展ClientMember
表
我遗漏了什么?我这样做的方式是使用
数据扩展扩展扩展成员
,如下所示:
客户成员
config.yml
您能否澄清一下,您是想用ClientMember完全替换成员,还是想同时拥有ClientMember和Member?我正在尝试替换(扩展)成员。在理想情况下,它们是分开的,但我想重用Member附带的所有登录功能。@nickspiel对此做了更多解释:所有新数据都将在ClientMember中(所以地址等等),但Member表仍然存在,当您保存新成员时,您使用该类而不是ClientMember。。。。因此,请阅读扩展是如何工作的,以便更好地理解它:)现在,当我访问安全选项卡时,我将其切换到了这个新设置,得到了以下信息:“调用未定义的方法ClientMember::setSourceQueryParams()”看起来安全选项卡正试图将“ClientMember”视为DataObject$item->setSourceQueryParams($this->dataQuery()->getQueryParams());(form DataList.php createDataObject())这很奇怪。我以前在项目中使用过相同的方法,但从未遇到过这个问题。我将尝试我的答案中的确切代码,看看是否可以重新创建您的问题。对于那些感兴趣的人,我不得不丢弃与成员关联的表并重新构建,然后一切都按预期进行。
Member:
extensions:
- ClientMember