我可以通过URL预填充Silverstripe 4中新对象的字段吗?
我目前正在处理的Silverstripe项目有一个对象,其字段名为我可以通过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
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
构建用于编辑该对象的表单?