我正在研究的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类来预设FormField的值:
public function populateDefaults() {
parent::populateDefaults();
$code = Controller::curr()->getRequest()->getVar("Code");
$this->Code = $code;
}
这将从URL获取Code参数,并在字段为scaffolded之前使用此值预设新ObjectName的值。默认的脚手架使用调用DataObject的值来填充FormFields,因此您的GET-param将显示给用户。