簡體   English   中英

Silverstripe table_name未設置為類

[英]Silverstripe table_name not set for class

我剛剛學習SilverStripe,我實際上在silverstripe網站上的課程有問題。

我有這門課:

namespace SilverStripe\Lessons;

use Page;

class ArticlePage extends Page
{
    private static $can_be_root = false;
    private static $db = [
        'Date' => 'Date',
        'Teaser' => 'Text',
        'Author' => 'Varchar(255)',
    ];

//    public function getCMSFields(){
//        $fields = parent::getCMSFields();
//        $fields = addFieldToTab();
//        return $fields;
//    }

}

現在當我/ dev / build我在構建頁面上得到這個反饋: 在此輸入圖像描述

所以我接下來做的是實際注釋掉$ db數組的聲明。 然后我從dev / build獲得了這個反饋:

在此輸入圖像描述

所以我不確定的一些事情。 dev / build的第一個輸出中的紅色注釋表明您應該為所有命名空間模型定義table_name。 它確實沒有聲明我有一個未定義的table_name。 但是它下面的下一個注釋表示沒有為類SilverStripe \\ Lessons \\ ArticlePage設置table_name。 那么定義一個table_name並在這些消息的上下文中“設置”table_name是一回事嗎?

此外,第二個輸出表明為SilverStripe \\ Lessons \\ ArticlePage定義了table_name事實上每個table_name都附加了“2”,這是我在開始這篇文章之前進行實驗的結果我相信。 即,一旦我看到這種行為,我重復實驗嘗試重現行為,因此創建和刪除了更多的表,因此他們的名字必須遞增。 那么為什么沒有設置ArticlePage table_name? 有人可以幫我解決這個問題嗎? 戴夫。

該消息意味着您應該為具有自己的數據庫表的頁面(和DataObjects)配置table_name

在您自己的代碼中,最好通過添加私有靜態屬性來實現,如下所示:

private static $table_name = 'ArticlePage';

為避免名稱沖突,最好在表名前加上您自己的公司名稱或類似名稱。 但是,如果您正在開發將在多個上下文中運行的模塊或其他代碼,這才是非常重要的。

使用靜態屬性的替代方法是通過YML定義它。 所以在你的_config/mysite.yml你會放:

SilverStripe\Lessons\ArticlePage:
  table_name: ArticlePage

注意:使用table_name的更改是在SilverStripe 4.0.0之后引入的,因此該課程可能未涵蓋此主題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM