我可以通过 URL 在 Silverstripe 4 中预填充新对象的字段吗?

Can I pre-fill the field of a new object in Silverstripe 4 via the URL?

我目前正在处理的 Silverstripe 项目有一个对象,其字段名为 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 进行自定义修改?如果需要自定义修改,我应该使用什么方法?

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

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

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