SilverStripe - 限制数据对象可以拥有的多个关系的数量

2023-12-04

如果我有一个$has_many我想与之管理的关系GridField在 cms 中,我将如何限制一个对象可以拥有的关系数量?这可能吗?

我可以在模型中执行此操作吗?还是必须将其添加到GridField我正在使用添加和删除关系?

我正在考虑实施GridField_SaveHandler定制GridFieldComponent但不确定如果我检测到有问题,如何使用它来中止保存。


以下两种解决方案并不是解决此问题的最干净的方法,而是最实用且最容易实现的方法。

基本上,我建议做的就是对对象进行计数,并在计数超过一定数量时删除添加新记录的功能。

如果您想限制单个关系/网格上的记录数量(假设每个团队最多 5 名玩家):

class Player extends Dataobject {
    private static $db = array('Title' => 'Varchar');
    private static $has_one = array('TeamPage' => 'TeamPage');
}
class TeamPage extends Page {
    private static $has_one = array('Players' => 'Player');
    public function getCMSFields() {
        $fields = parent::getCMSFields();
        $config = GridFieldConfig_RecordEditor::create();
        if ($this->Players()->count > 5) {
            // remove the buttons if we don't want to allow more records to be added/created
            $config->removeComponentsByType('GridFieldAddNewButton');
            $config->removeComponentsByType('GridFieldAddExistingAutocompleter');
        }
        $grid = GridField::create('Players', 'Players on this Team', $this->Players(), $config);
        $fields->addFieldToTab('Root.Main', $grid);
        return $fields;
    }
}

如果你想限制全局记录总数(如果我们将这种方式限制为5,这意味着如果1支球队已经有3名球员,那么第2支球队只能有2名):

class Player extends Dataobject {
    private static $db = array('Title' => 'Varchar');
    private static $has_one = array('TeamPage' => 'TeamPage');
    public function canCreate($member = null) {
        if (Player::get()->count() > 5) {
           return false;
        }
        return parent::canCreate($member);
    }
}
class TeamPage extends Page {
    private static $has_one = array('Players' => 'Player');
    public function getCMSFields() {
        $fields = parent::getCMSFields();
        $config = GridFieldConfig_RecordEditor::create();
        $grid = GridField::create('Players', 'Players on this Team', $this->Players(), $config);
        $fields->addFieldToTab('Root.Main', $grid);
        return $fields;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SilverStripe - 限制数据对象可以拥有的多个关系的数量 的相关文章

  • Silverstripe 管理员:“有一个”下拉列表在导入后转换为普通输入字段

    我在 Silverstripe 的管理方面遇到一些问题 我定义了一个数据库模型 请参阅下面的类定义 在进行开发 构建后 一切都按预期进行 当我尝试添加新的 包 时 所有 有一个 字段都带有下拉菜单 参见屏幕截图 1 我还构建了一个导入这些包
  • php默认时区错误

    我在尝试安装 Kohana SilverStripe 时收到以下错误 警告 这意味着什么 我该怎么做 Warning date default timezone get It is not safe to rely on the syste
  • SilverStripe - 限制数据对象可以拥有的多个关系的数量

    如果我有一个 has many我想与之管理的关系GridField在 cms 中 我将如何限制一个对象可以拥有的关系数量 这可能吗 我可以在模型中执行此操作吗 还是必须将其添加到GridField我正在使用添加和删除关系 我正在考虑实施Gr
  • Silverstripe 3.1.5 - 上传错误 SyntaxError:意外的标记 <

    我需要上传 svg 文件 为此 我将 svg 添加到我的 config yml 上传字段允许的扩展名以及 asset 中的 htacces 另外 我的所有资产目录都有 CHMOD 777 文件已上传但未附加 相反 我在上传字段中收到此错误语
  • SilverStripe 4.1 - SS_DEFAULT_ADMIN_USERNAME 和 PASSWORD 不受尊重

    我有一个在 Ubuntu Vagrant VM 上运行的 SilverStripe 4 1 站点 从 3 4 升级 我有以下内容 env file Default Admin SS DEFAULT ADMIN USERNAME admin
  • 如何在silverstripe数据扩展中自动发布图像

    我试图将上传字段添加到自定义数据扩展并让图像字段正常工作 但是 我上传的图像仍处于概念模式 我必须转到 文件 选项卡才能发布它 我尝试使用 Silverstripe 文档中提供的代码 但这似乎只适用于常规页面 我发现了一个和我类似的问题 如
  • $Pos from Bottom inside <%循环DataObjects %>

    可以在数据对象上的模板循环内以某种方式判断您是否位于 Pos 24 但从底部开始计数 类似于 do stuff or like do stuff or like do stuff 在 Silverstripe 3 中 能够执行以下操作 He
  • 银条纹。如何从www.域名重定向到域名?

    我正在寻找该方法的相反方法 Director forceWWW 我的主域应该是 没有 www 的域名 com SilverStripe 没有将所有 www 链接重定向到非 www 链接的功能 相反 你可以写一个 htaccess Rewri
  • 是否可以在 Silverstripe 模板变量上运行函数来格式化输出?

    我创建了一个数据模型 其中包含办公室地址的纯文本区域输入字段 我想做相当于nl2br OfficeAddr 在我的相关 Silverstripe 模板中打印数据时 据我所知 他们的模板系统不支持此类功能 我错过了什么吗 有什么推荐的解决方法
  • 如何将自定义数据传递到模板

    一般来说 我对 OOP 框架很陌生 尤其是 Silverstripe 我确信我错过了一些重要的东西 我目前正在尝试为我的主页创建一个 Twitter feed 在我的 Page controller 中我有 public function
  • Silverstripe 条件验证

    我有一个包含多个操作的表单 例如创建订单并创建报价 根据单击的操作 我需要应用不同的验证 例如报价不需要订单参考号 这在 Silverstripe 中可能吗 如果不是的话我该怎么办呢 public function Order reques
  • 银条。已上传直播。获取“SilverStripe Framework 需要定义 $databaseConfig”。

    我已将网站上传到实时服务器 导入数据库并更新 mysite config php 中的数据库连接信息 但出现以下错误 SilverStripe Framework requires a databaseConfig defined 这似乎来
  • 银条纹。在 ModelAdmin 中按日期范围搜索

    我的数据对象中有日期属性 如何在 ModelAdmin 中按日期范围进行搜索 例如 搜索日期大于 2007 13 01 且小于 2007 17 01 的所有项目 或 搜索日期在 2007 13 01 和 2007 17 01 之间的所有项目
  • silverstripe Sitetree onAfterWrite - renderWith 错误:找不到模板

    为了从页面内容自动生成 pdf 我想在页面类的 onAfterWrite 中使用 renderWith 函数 稍后使用 DOMPDF 将从返回的 HTML 生成 PDF public function onAfterWrite parent
  • 如何在 Admin Silverstripe 中添加自定义按钮及其功能?

    如何在 Admin Silverstripe 中添加自定义按钮及其功能 请告诉我解决方案 Custom Button add only in one menu 就像评论中提到的 wmk一样 您可以直接获取框架代码GridFieldPrint
  • Silverstripe 后端发生奇怪的行为?

    突然间 每当我尝试单击 silverstripe 后端中的页面时 它最初会显示如下 我正在运行 SS 3 2 当这种情况开始发生时 我升级到 3 2 1 看看是否可以解决问题 但不行 有时它也会显示此错误消息 User Warning Co
  • 静态发布和 HTTPS

    遵循这个问题 大型网站上 Silverstripe 的静态发布 https stackoverflow com questions 46313840 static publishing in silverstripe on large si
  • 如何翻译$url_handlers?

    我遇到一个情况 需要翻译以下内容 url handlers对于不同的国家 因此 在英文网站上 URL 如下所示 http website com gyms boston group training http website com gym
  • 如何在 Silverstripe CMS 中使用 JavaScript?

    我正在使用 SilverStripe 3 0 CMS 并且我需要将 Google 地图包含到 CMS 中 我正在跟进这一步 http www silverstripe org general questions show 14596 pos
  • 可选的OptionsetField是SilverStripe 3.2

    在 SilverStripe 3 1 中 我使用了一些带有 OptionssetFields 的表单 这些表单是可选的 因此不需要做出选择 这运作良好 但自从我更新到 SilverStripe 3 2 0 后 该表单不再接受这一点 提交时

随机推荐