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
函数的工作原理 您似乎无法在它运行之前修改对象。
我正在尝试将 'AbsoluteLink' 属性 添加到 DataList 中的每个 DataObject,然后使用 JSONDataFormatter::convertDataObjectSet()
.
我有以下功能:
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
函数的工作原理 您似乎无法在它运行之前修改对象。