在我保存并发布Silverstripe Elemental中的children元素之前,如何获取父元素属性?

时间:2016-10-26 22:55:22

标签: php silverstripe

我在使用silverstripe elemental时遇到了一些问题。我试图在children元素中获取一些父元素属性,但只有在我保存并发布子元素之后,父元素属性才可用。

例如,我想在children元素QuizAnswer中获取QuizQuestion元素属性bode(G),但我只在数据库中获得默认值QuestionNumber = 2

当我QuestionNumber = 0时,我可以看到它确实是2.如何在保存和发布子元素之前获取父元素属性?

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);
}