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

时间:2019-02-22 01:02:58

标签: silverstripe silverstripe-4

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

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

以下URL将在CMS中打开“创建新对象”屏幕(在本地dev中):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进行自定义修改?如果需要自定义修改,我应该使用哪种方法?

1 个答案:

答案 0 :(得分:0)

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

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

这将从字段中获取Code参数,并在将这些字段设置为脚手架之前使用此值预设新的ObjectName的值。默认的脚手架使用调用DataObject的值来填写FormField,因此您的GET参数将显示给用户。