2015-09-26 48 views
1

我有以下佈局:使用ORM在控制器SilverStripe

mypage.ss

$CreateString 
<% loop $LatestString %> 
    <div>$StringVar</div> 
<% end_loop> 

mypage.php

class MyPage extends Page { 

    private static $db = array(
     'StringVar' => 'Varchar' 
    ); 
} 

class MyPage_Controller extends Page_Controller { 

    public function CreateString() { 
     $varS = MyPage::create(array('StringVar' => 'Jonh Davies')); 
     $varS = MyPage::write(); 
     return $varS; 
    } 

    public function LatestString() { 
     return MyPage::get() 
      ->sort('Created', 'DESC') 
      ->limit(1); 
    } 
} 

是什麼,創建的事情,現在有來自控制器的輸出。沒有創建記錄,也沒有輸出。

+0

你在MyPage_Controller上測試它嗎?你沖水了嗎?您可以通過調用URL中控制器的名稱直接調用控制器,例如'http:// example.com/MyPage_Controller /' – wmk

+0

我在mypage.ss佈局中調用$ CreateString和$ LatestString。 – SIlverstripeNewbie

回答

2

在上例中,MyPage未發佈。你CreateString方法應該看起來更像是:

$varS = MyPage::create(...); 
$varS->write(); 
$varS->publish('Stage', 'Live'); 
return $varS; 

我什至不知道什麼是「我的編目::寫」會做,但它可能甚至沒有保存在臨時表中的記錄開始。我有點驚訝,不會產生錯誤。

+0

mypage.ss位於Layouts文件夾中,爲什麼mypage.ss未發佈? – SIlverstripeNewbie

+0

您必須手動發佈頁面,導致它插入了Versioned擴展,並且write()只寫入階段databasetable。 你能看到在數據庫中創建的頁面嗎? – wmk

+0

不,我沒有在數據庫中看到創建的頁面 – SIlverstripeNewbie