- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
无法在 SilverStripe Documentation 中定位如何让数据对象模型在/dev/build 上注入(inject)一组默认记录
谁能给我指出正确的方向
这就是我目前拥有的,显然我想将预配置选项注入(inject)到我的模块的这个恰当命名的配置模型中。
class Configuration extends DataObject
{
private static $db = array(
'Option' => 'Varchar',
'Value' => 'Varchar'
);
private static $summary_fields = array(
'Option' => 'Option',
'Value' => 'Value',
);
}
在此先感谢您的指导/指点。
更新下面的@Barry 将我转到了 SiteConfig
然而,按照他的做法,requireDefaultRecords() 并没有注入(inject)默认值
Note: I have since revisited /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"
);
}
最佳答案
使用函数 requireDefaultRecords在 DataObject 中 - 这在每个 dev/build
期间被调用.
Note: First check if the option exists to prevent duplicates as this will be called every time you dev build.
class Configuration extends DataObject {
private static $db = array(
'Option' => 'Varchar',
'Value' => 'Varchar'
);
private static $summary_fields = array(
'Option' => 'Option',
'Value' => 'Value',
);
function requireDefaultRecords() {
parent::requireDefaultRecords();
$arrOptions = array(
'Option1' => 'Value1',
'Option2' => 'Value2',
'Option3' => 'Value3',
);
foreach ($arrOptions as $strOption => $strValue) {
if (!$configuration = Configuration::get()->filter('Option',$strOption)->first())
$configuration = Configuration::create(array('Option' => $strOption));
$configuration->Value = $strValue;
$configuration->write();
}
}
}
最后一个评论是有一个 module对于 SiteConfig它被 SilverStripe、大多数模块使用,我建议您将配置值改为这样。
如果您选择 SiteConfig
那么请看函数populateDefaults和 documentation对于它的用途,这是一个例子......
/**
* Sets the Date field to the current date.
*/
public function populateDefaults() {
$this->Date = date('Y-m-d');
parent::populateDefaults();
}
(如果在扩展中使用上面的内容,它可能需要 $this->owner->Date
而不是 $this->Date
)
如果所有的值都是静态的,则不需要上面的函数,而是它将只从这个数组中读取它们(同样在 DataObject
内)
public static $defaults = array(
'Option1' => 'Value1',
'Option2' => 'Value2'
);
这适用于任何 DataObject
同样,但作为SiteConfig
管理一个记录,这会在创建时填充该记录,这比使用 requireDefaultRecords
更方便.
关于php - 银条 3.4 : How to add default records to db from model,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39138415/
我是一名优秀的程序员,十分优秀!