我在$ db数组中设置的默认值为“1”。例如:
class Page extends SiteTree {
public static $defaults = array(
"Indexing" => "1"
);
}
这很好用并且非常好地设置默认值。现在我有一个不同的页面类型,例如:
class mypage extends page{
// Since this class extends page so it will take the default
// value "Indexing" => "1" ..
}
我想设置默认值“Indexing”=> “mypage”页面类型中的“0”。我怎样才能做到这一点。
我尝试了以下内容:
class mypage extends page{
public static $defaults = array(
"Indexing" => "0"
);
}
这不起作用,因为设置了父默认值。 任何帮助将深表感谢。感谢。
答案 0 :(得分:1)
显然这会出错,因为$ db不是用于设置值,而是silverstripe的数据库定义。
如果它没有错误地工作,那么你要么没有粘贴完整的代码,要么silverstripe中存在一个错误,让你可以通过这种错误的语法找到方法。
不管怎样,她的工作方式如下:class Page extends SiteTree {
// public static for SilverStripe 3.x, private static for 3.1+
public static $db = array(
"Indexing" => "Int",
);
public static $defaults = array(
"Indexing" => 1,
);
}
现在这是基类,对于子类,我不是100%确定覆盖默认值实际上有效,但试一试,如果它没有,你必须覆盖{ {1}}方法并将其设置在那里。
populateDefaults
或者,如果这不起作用,则必须如上所述覆盖class OtherPage extends Page {
public static $defaults = array(
"Indexing" => 2,
);
}
populateDefaults
是通常读取$ defaults变量并设置一些系统默认值的方法。
populateDefaults
请注意,在所有情况下(class OtherPage extends Page {
public function populateDefaults() {
$return = parent::populateDefaults();
$this->Indexing = 2;
return $return;
}
}
和$defaults
),只有在创建第一个记录时才会运行。
这也意味着如果你已经有了一个记录,并且稍后添加了像Indexing这样的字段,它将不会影响现有记录,那些将具有NULL,0,空字符串等值,具体取决于数据类型。< / p>
答案 1 :(得分:1)
public function populateDefaults(){
if($this->ClassName == "mypage")
$this->PGIndexing = "0";
else
$this->PGIndexing = "1";
}
您可以在此处根据类名设置默认值。所以这应该工作。干杯:)