Silverstripe onBeforeWrite()中的newClassInstance()有问题

Silverstripe onBeforeWrite()中的newClassInstance()有问题,silverstripe,Silverstripe,我试图在onBeforeWrite期间基于另一个字段更改页面类型 if(($this->Status == "Available" || $this->Status == "Sold") && $this->ClassName != "Listing") { $this->newClassInstance("Listing"); } elseif( ( $this->Status == "Unavailable" || $this->S

我试图在onBeforeWrite期间基于另一个字段更改页面类型

if(($this->Status == "Available" || $this->Status == "Sold") && $this->ClassName != "Listing") {
    $this->newClassInstance("Listing");
} elseif( ( $this->Status == "Unavailable" || $this->Status == "Closed") && $this->ClassName != "UnavailableListing")  {
    $this->newClassInstance("UnavailableListing");
}

这是使用此功能的正确方法吗?

旧问题,但我认为您仍然缺少

parent::onBeforeWrite();

在函数结束时调用。希望这对某人有所帮助。

列出列表的子类是否不可用?它有额外的字段吗?如果没有其他更改,您可以尝试$this->ClassName='UnavailableListing'更改保存到DB的类。如果您只是尝试更改当前页面的页面类型,更改$this->ClassName实际上可能会奏效。是的,UnavailableListing只是列表的一个子类。没有新的feild,本质上它的子类使用不同的模板,因此它显示在ModelAdmin中的不同列表中。我使用的是$this->ClassName='UnavailableListing',但文档建议使用newClassInstance