Silverstripe 4项目有一个扩展的页面,它自动生成一个" MetaImage"在保存,然后应该附加到页面。示例代码如下:
class ExamplePage extends \Page
{
private static $has_one = [
'MetaImage' => 'SilverStripe\Assets\Image'
];
public function onBeforeWrite()
{
if ($this->MetaImageID == 0) {
$metaObjectImage = new Image();
$metaObjectImage->setFromLocalFile($tmpFolder.'/'.$fileName);
$metaObjectImage->ParentID = $saveFolder->ID;
$metaObjectImage->Title = $this->Title;
$metaObjectImage->write();
$metaObjectImage->doPublish();
$this->MetaImageID = $metaObjectImage->ID;
}
parent::onBeforeWrite();
}
}
然而,图像正连接到"舞台"版本,但不是" Live"版。 MetaImageID在数据库的ExamplePage
表中更新,但不在ExamplePage_Live
表中更新。
我猜这个问题是$this->MetaImageID = $metaObjectImage->ID;
没有正确设置关系,但我不确定如何更改这个,所以它确实保存到" Live"发布ExamplePage时。