2015-09-26 2 views
1

У меня есть следующий макет:Использование ОРМ в контроллере 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

Я вызываю $ CreateString и $ LastString в моем макете mypage.ss. – SIlverstripeNewbie

ответ

2

В приведенном выше примере MyPage не публикуется. Ваш метод CreateString должен выглядеть как:

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

Я даже не уверен, что «MyPage :: пишет» будет делать, но это, вероятно, даже не сохраняя записи в промежуточной таблице, чтобы начать с. Я немного удивлен, что это не ошибка.

+0

mypage.ss находится в папке Layouts, почему он не опубликован mypage.ss? – SIlverstripeNewbie

+0

вы должны опубликовать страницу вручную, потому что она имеет подключаемое расширение версии, а write() просто записывает в stage databasetable. Вы видите страницу, созданную в базе данных? – wmk

+0

нет Я не видел страницу, созданную в базе данных – SIlverstripeNewbie

Смежные вопросы