我可以通过 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 参数将显示给用户。
我目前正在处理的 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 参数将显示给用户。