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

我可以通过URL预填充Silverstripe 4中新对象的字段吗?,silverstripe,silverstripe-4,Silverstripe,Silverstripe 4,我目前正在处理的Silverstripe项目有一个对象,其字段名为code: class ObjectName extends DataObject { private static $db = [ 'Title' => 'Varchar', 'Code' => 'Varchar', 'Description' => 'HTMLText', ]; 以下URL将在CMS中打开创建新对象屏幕(在本地开发中):http://localhost.app

我目前正在处理的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
字段

e、 g.
http://localhost.app/admin/object-management/ObjectName/EditForm/field/ObjectName/item/new?Code=CodeGoesHere


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

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

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

这将从URL获取代码参数,并在构建字段之前使用此值预设新ObjectName的值。默认架子工使用调用数据对象的值来填充表单字段,因此您的GET参数将显示给用户。

在后端,如果没有正确验证新创建的项,听起来很可怕。您可以挂接到
DataObject::populateDefaults()
并选中
Controller::curr()->request->getVars()
以预填充新项。是否使用
GridFieldDetailForm
构建用于编辑该对象的表单?