【问题标题】:How to set & lock SiteTree in Silverstripe 4?如何在 Silverstripe 4 中设置和锁定 SiteTree?
【发布时间】:2025-11-24 17:50:01
【问题描述】:

我们正在开展一个项目,其中 Silverstripe 充当具有单个 API 数据点的无头 CMS。

内容全部来自非 SiteTree 数据对象,API 数据点是我们需要的唯一 SiteTree 记录。

确保 API 数据点存在且它是每个 /dev/build 上唯一的 SiteTree 记录的最佳方法是什么。然后我们可以在LeftAndMain 中禁用PagesAdmin,这样用户就无法编辑/破坏它。

我有found code here,在我们的案例中看起来有点像这样:

$api = new API/AccessPoint();
$api->Title = 'API';
$api->URLSegment = 'home';
$api->ShowInMenus = '1';
$api->Version = '1';
$api->ParentID = '0';
$api->write();
$api->doRestoreToStage();

但我不确定确保 dev\build 删除所有其他页面并创建此页面的 1 条记录的正确方法。

任何帮助将不胜感激。

【问题讨论】:

    标签: php silverstripe silverstripe-4


    【解决方案1】:

    您可以在 DataObject 中使用 requireDefaultRecords() 在开发/构建中创建记录。不过,您需要在创建新的之前进行某种检查,例如

    public function requireDefaultRecords()
    {
        parent::requireDefaultRecords();
    
        if (AccessPoint::get()->filter('URLSegment', 'home')->exists()) {
            return;
        }
    
        // create your new object here
    }
    

    【讨论】: