繁体   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