SilverStripe convertDataObjectSet 正在剥离其他属性

SilverStripe convertDataObjectSet is stripping additional properties

我正在尝试将 'AbsoluteLink' 属性 添加到 DataList 中的每个 DataObject,然后使用 JSONDataFormatter::convertDataObjectSet().

将列表转换为 JSON

我有以下功能:

public function json() {
    $data      = ResourceCentreArticlePage::get()->filter('ShowInMenus', '1')->filter('ShowInSearch', '1')->sort('Created', 'DESC');
    $pageArray = new ArrayList();

    foreach ($data as $page) {
        $page->AbsoluteLink = $page->AbsoluteLink();
        $pageArray->push($page);
    }

    // If I dump out the content of $pageArray here the object has the AbsoluteLink property  

    $jsonFormatter = new JSONDataFormatter();
    $jsonData      = $jsonFormatter->convertDataObjectSet($pageArray);

    // If I dump out the content of $jsonData here there is no AbsoluteLink property

    $this->response->addHeader("Content-type", "application/json");

    return $jsonData; 
}

问题:

通过 convertDataObjectSet 方法在 运行 $pageArray 之后删除了 AbsoluteLink 属性。

我错过了什么?

使用 $jsonFormatter->setCustomAddFields(); 会有所帮助。

将以下内容添加到页面 class:

public function getMyAbsoluteLink() {
    return $this->AbsoluteLink();
}

例如Page.php:

class Page extends SiteTree {
    public function getMyAbsoluteLink() {
        return $this->AbsoluteLink();
    }
}

然后像这样使用 "magic field":

public function json() {
    $pages = Page::get()
        ->filter('ShowInMenus', '1')
        ->filter('ShowInSearch', '1')
        ->sort('Created', 'DESC');

    $jsonFormatter = new JSONDataFormatter();
    // add your custom field
    $jsonFormatter->setCustomAddFields(["MyAbsoluteLink"]);
    $jsonData = $jsonFormatter->convertDataObjectSet(
        $pages
    );

    return $jsonData;
}

注意 $jsonFormatter->setCustomAddFields(["MyAbsoluteLink"]); 并且我删除了数组操作。

我还删除了您的数组操作。 convertDataobjectSet 函数的工作原理 您似乎无法在它运行之前修改对象。