0

我正在为一个项目寻找一个使用 Siverstripe 的博客模块。该博客具有我想要的大部分功能,但由于该网站主要以书籍为重点,因此我想在 blogpost 表中添加一些字段来保存书籍数据(标题、作者、评级等。看起来这应该相对简单但我似乎无法让它工作。我创建了以下扩展 PHP 文件:

namespace SilverStripe\Blog\Model;

use SilverStripe\Blog\Model\BlogPost;
use SilverStripe\ORM\DataExtension;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\TextField;
use SilverStripe\Forms\TextareaField;

class BookDataExtension extends BlogPost
{

    private static $db = [
        'bookTitle' => 'Varchar',
        'bookAuthor' => 'Varchar',
        'bookSeries' => 'Varchar',
        'bookISBN' => 'Varchar',
        'bookSeriesNum' => 'Int',
        'bookRating' => 'Decimal',
        'bookCover' => 'Varchar'
    ];

}

并将以下内容添加到 mysite.yml 文件中:

SilverStripe\Blog\BlogPost:
  extensions:
    - SilverStripe\Blog\BookDataExtension

我还尝试将上述内容添加到博客模块本身的 config.yml 文件中。但是,无论我尝试什么,当我重建系统时,它都会为 BookDataExtension 创建表,而不是将字段添加到 BlogPost 表中。我究竟做错了什么?

4

2 回答 2

1

你继承BlogPost了它而不是插入一个扩展,又名。扩展它...

BlogPostExtension必须继承DataExtension;它可以在您自己的命名空间中:

namespace MyProject\Extensions;

use SilverStripe\ORM\DataExtension;

class BookDataExtension extends DataExtension
{

    private static $db = [
        'bookTitle' => 'Varchar',
        'bookAuthor' => 'Varchar',
        'bookSeries' => 'Varchar',
        'bookISBN' => 'Varchar',
        'bookSeriesNum' => 'Int',
        'bookRating' => 'Decimal',
        'bookCover' => 'Varchar'
    ];

}

然后你可以BlogPost像以前一样配置添加你的扩展:

SilverStripe\Blog\BlogPost:
  extensions:
    - MyProject\Extensions\BookDataExtension
于 2018-02-19T07:49:50.130 回答
0

尝试这个:

<?php

namespace {

    use SilverStripe\ORM\DataExtension;
    use SilverStripe\Forms\FieldList;

    class BookDataExtension extends DataExtension {

        private static $db = [
            'db_field_example' => 'Varchar'
        ];

        public function updateCMSFields(FieldList $fields) {
            // Add fields here
        }

    }

}

将您的扩展添加到 app/src/extensions/

并在您的配置中:

SilverStripe\Blog\Model\BlogPost:
  extensions:
    - BookDataExtension
于 2018-09-04T16:10:15.930 回答