我在使用silverstripe elemental时遇到了一些问题。我试图在children元素中获取一些父元素属性,但只有在我保存并发布子元素之后,父元素属性才可用。
例如,我想在children元素QuizAnswer中获取QuizQuestion元素属性bode(G)
,但我只在数据库中获得默认值QuestionNumber = 2
。
当我QuestionNumber = 0
时,我可以看到它确实是2.如何在保存和发布子元素之前获取父元素属性?
答案 0 :(得分:1)
我现在不知道这个模块,但通常你应该可以从当前网址中获取父ID。它非常hacky但应该适合你。
public function ItemByUrl() {
$uri = explode('/', $_SERVER['REQUEST_URI']);
$i = array_search('IDENTIFIER', $uri);
if(isset($uri[$i+PARTS])) {
$itemID = $uri[$i+PARTS];
$item = DATAOBJECTCLASS::get()->byID($itemID);
if($item) {
return $item;
}
}
}
所以如果你的网址是那样的
admin/.../EditForm/field/ParentDataObject/item/67/ItemEditForm/field/ChildDataObject/item/new
你想获得ParentID 67
IDENTIFIER将是" ParentDataObject"
PARTS将是" 2"
和DATAOBJECTCLASS将是" ChildDataObject"
答案 1 :(得分:1)
此时父记录应该可用。确保首先调用父方法。
在幕后,elemental只使用GridField,因此您可以搜索任何与GridField相关的文档,以便更好地理解这一点。
public function onBeforeWrite()
{
parent::onBeforeWrite();
// $this->List(); // Obj(ID = 2);
}