2016-09-18 38 views
1

我有ModularPage類延伸Page。頁面有一個'縮略圖'Image圖像無法通過ORM加載到SS4中

我有一個路線爲ajaxing ModularPage集合。我用以下方法獲取集合:

$rootPage = DataObject::get_by_id('SilverStripe\\CMS\\Model\\SiteTree', $id);  
$pages = $rootPage->Children(); 

foreach ($pages as $page) { 
    var_dump($page->Thumbnail()->Link()); // Null 
    var_dump($page->ThumbnailID); // '4' 
} 

ThumbnailID已填充,但縮略圖對象爲空。這是一個錯誤?我需要在SS4中做任何不同的事情嗎?

更新:所以,當我直接從瀏覽器訪問路由的鏈接填充正確。通過Ajax訪問時,Link爲空。

更新2:圖像鏈接()也可以按照正常方式從同一類訪問,只有在通過ajax調用時纔會被剝離。

+0

只是出於好奇,如果你得到是作爲真正的頁面類的神奇方法thumbnail()然後返回corret實體。例如,get_by_id(「Page」或應該如何使用oit來與命名空間一起使用。沒有4.0版本的內部版本來測試它。 –

+0

過濾Id也使用正確的類名直接獲取對象,如果您訪問數據字段不是主要查詢的一部分,它會爲每次迭代的數據庫請求。Page :: get() - > filter(「parentId」,無論);應該比SiteTree :: get更優化,因爲後者會導致迭代加載每個項目的新數據。也就是說,如果我知道它是如何在至少3.2版本上完成的話)。 –

+0

@FinBoWa我試着調用真正的'Page類,當從端點收到時仍然爲空。在'SiteTree'上使用'Page'的效率很好,我將來會這樣做。 – nickspiel

回答

1

達米安排序幫助這一個在github上的問題:https://github.com/silverstripe/silverstripe-framework/issues/6048#issuecomment-248572357

有一個$owns靜態數組告訴父對象發佈時公佈什麼關係。

添加以下引起縮略圖出版,現在正確顯示:

class Page extends SiteTree { 
    private static $owns = [ 
     'Thumbnail' 
    ]; 
} 

目前這個看起來像出版資產的唯一方法。看起來這些人正在討論未來在資產上添加發布按鈕。