【问题标题】:Can I pre-fill the field of a new object in Silverstripe 4 via the URL?我可以通过 URL 预填充 Silverstripe 4 中新对象的字段吗?
【发布时间】:2019-02-22 01:02:58
【问题描述】:

我目前正在从事的 Silverstripe 项目有一个 Object,其字段名为 Code

class ObjectName extends DataObject
{
  private static $db = [
    'Title' => 'Varchar',
    'Code' => 'Varchar',
    'Description' => 'HTMLText',
  ];

以下 URL 将在 CMS 中打开创建新对象屏幕(在本地开发中):http://localhost.app/admin/object-management/ObjectName/EditForm/field/ObjectName/item/new

我们希望能够在该 URL 上附加一些内容,以预填充新对象的 Code 字段。

例如http://localhost.app/admin/object-management/ObjectName/EditForm/field/ObjectName/item/new?Code=CodeGoesHere

在当前框架内这可能吗?还是需要对 CMS 进行自定义修改?如果需要自定义修改,我应该使用什么方法?

【问题讨论】:

  • 在后端如果没有对新创建的项目进行适当的验证,这听起来很可怕。您可以连接到 DataObject::populateDefaults() 并检查 Controller::curr()->request->getVars() 以预填充新项目。
  • 您是否使用GridFieldDetailForm 搭建用于编辑该对象的表单?

标签: silverstripe silverstripe-4


【解决方案1】:

您可以通过将以下代码添加到您的 ObjectName 类来预设 FormField 的值:

public function populateDefaults() {
    parent::populateDefaults();
    $code = Controller::curr()->getRequest()->getVar("Code");
    $this->Code = $code;
}

这会从 URL 中获取 Code 参数,并在构建字段之前使用该值预设新 ObjectName 的值。默认的脚手架使用调用 DataObject 的值来填充 FormFields,因此您的 GET-param 将显示给用户。

【讨论】:

    猜你喜欢
    • 2015-11-21
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 2022-11-04
    • 2020-11-16
    • 1970-01-01
    相关资源
    最近更新 更多