gpt4 book ai didi

php - 银条 3.4 : How to add default records to db from model

转载 作者:可可西里 更新时间:2023-11-01 13:22:22 28 4
gpt4 key购买 nike

无法在 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那么请看函数populateDefaultsdocumentation对于它的用途,这是一个例子......

/**
* 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com