【发布时间】:2017-01-01 11:32:04
【问题描述】:
无法在SilverStripe Documentation 中找到如何让 DataObject 模型在 /dev/build 上注入一组默认记录
谁能指出我正确的方向
这是我目前拥有的,显然我想将预先配置的选项注入到我的模块的这个恰当命名的配置模型中。
class Configuration extends DataObject
{
private static $db = array(
'Option' => 'Varchar',
'Value' => 'Varchar'
);
private static $summary_fields = array(
'Option' => 'Option',
'Value' => 'Value',
);
}
提前感谢任何方向/指针。
更新 我被下面的@Barry 转到了 SiteConfig
但是按照他的做法,requireDefaultRecords() 没有注入默认值
注意:我已经重新访问了 /dev/build?flush
class RMSConfiguration extends DataExtension
{
private static $db = array(
'username' => 'Varchar',
'password' => 'Varchar',
'agent_id' => 'Varchar(15)',
'client_id' => 'Varchar(15)',
'testMode' => 'Int(1)',
'timezone' => 'Varchar',
'apiUrl' => 'Varchar(255)'
);
public function updateCMSFields(FieldList $fields)
{
$fields->addFieldsToTab(
"Root.RMSConfig",
array(
TextField::create('username', 'RMS Username'),
TextField::create('password', 'RMS Password'),
TextField::create('agent_id', 'RMS Agent ID'),
TextField::create('client_id', 'RMS Client ID'),
TextField::create('apiUrl', 'API Url'),
CheckboxField::create("testMode", 'Toggle Test Mode'),
DropdownField::create("timezone", 'Timezone', static::$timezones)
)
);
}
public function requireDefaultRecords()
{
parent::requireDefaultRecords();
$arrOptions = array(
'timezone' => 'Australia/Sydney',
'apiUrl' => 'https://api.example.com.au/',
'testMode' => 0
);
foreach ($arrOptions as $strOption => $strValue) {
if (!$configuration = self::get()->filter('Option', $strOption)->first()) {
$configuration = self::create(array( 'Option' => $strOption ));
}
$configuration->Value = $strValue;
$configuration->write();
}
}
/**
* List of timezones supported by PHP >=5.3.x
*
* @var array
*/
public static $timezones = array(
"Africa/Abidjan",
"Africa/Accra",
"Africa/Addis_Ababa",
"Africa/Algiers",
...
...
"Zulu"
);
}
【问题讨论】:
-
我认为您应该将这些问题分成两个不同的问题,因为@barry 的回答对于您提出问题的方式是正确的。但是关于数据扩展的几点:self::get 你期望它返回什么?或者您实际上是在扩展 SiteConfig 吗?如果您是,那么您正在尝试使用该 for 循环创建多个站点配置。您应该做的是将数据写入手头的当前站点配置。例如。 $this->password = "耶"
-
我也这么认为,但是问题仍然围绕着默认值的注入。因此,与其重复自己,不如更新这个问题。相关性是齐头并进的。可能应该将
self换成static,只是不喜欢在类本身中引用类名的想法。 -
self:: 不是您要扩展的类 AFAIK: 您应该使用 SiteConfig::get 因为它不知道您要正确过滤的数据对象。遗憾的是,目前无法证实这一点。而且您最初是在某种程度上创建 EAV 表,现在您应该将数据写入当前/新创建的 SiteConfig,而不是创建新的站点配置。无论如何。让我们看看@Barry 是否扩展了答案。
-
@FinBoWa 我决定根据下面的评论进行扩展......这两种方法都适用于两个对象,因此选择哪个方向都是相关的
标签: php silverstripe