我刚刚学习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? 有人可以帮我解决这个问题吗? 戴夫。
答案 0 :(得分:9)
该消息意味着您应为具有自己的数据库表的页面(和DataObjects)配置table_name
。
在您自己的代码中,最好通过添加私有静态属性来实现,如下所示:
private static $table_name = 'ArticlePage';
为避免名称冲突,最好在表名前加上您自己的公司名称或类似名称。但是,如果您正在开发将在多个上下文中运行的模块或其他代码,这才非常重要。
使用静态属性的替代方法是通过YML定义它。所以在你的_config/mysite.yml
中你会放:
SilverStripe\Lessons\ArticlePage:
table_name: ArticlePage
注意: SilverStripe 4.0.0之后引入了table_name
的更改,因此该课程可能未涵盖此主题。