php – SilverStripe 3.4:如何从模型向db添加默认记录
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – SilverStripe 3.4:如何从模型向db添加默认记录,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3392字,纯文字阅读大概需要5分钟。
内容图文
![php – SilverStripe 3.4:如何从模型向db添加默认记录](/upload/InfoBanner/zyjiaocheng/825/2754b4c2331b41848094c115b518ad71.jpg)
无法在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',
);
}
提前感谢任何方向/指针.
UPDATE
我被@Barry转到SiteConfig下面
但是在遵循他的练习时,requireDefaultRecords()不会注入默认值
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"
);
}
解决方法:
使用DataObject中的函数requireDefaultRecords – 在每个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();
}
}
}
最后一个评论是,对于SilverStripe,大多数模块使用SiteConfig都有一个module,我建议你把配置值改为这样.
如果您确实选择了SiteConfig,那么请参阅功能populateDefaults和documentation以供它使用,这是一个例子……
/**
* Sets the Date field to the current date.
*/
public function populateDefaults() {
$this->Date = date('Y-m-d');
parent::populateDefaults();
}
(如果以上内容用于扩展名,则可能需要$this->所有者 – >日期而不是$this->日期)
如果所有值都是静态的,则不需要上面的函数,而是只从该数组中读取它们(同样在DataObject中)
public static $defaults = array(
'Option1' => 'Value1',
'Option2' => 'Value2'
);
这也适用于任何DataObject,但是当SiteConfig管理一条记录并且在创建时填充该记录一次,这对于使用而不是requireDefaultRecords更方便.
内容总结
以上是互联网集市为您收集整理的php – SilverStripe 3.4:如何从模型向db添加默认记录全部内容,希望文章能够帮你解决php – SilverStripe 3.4:如何从模型向db添加默认记录所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。