Silverstripe 如何在GridFieldDetailForm\u ItemRequest子类上实现表单?
我想创建一个自定义的GridField操作,它将在弹出窗口中打开一个表单。以下是我所拥有的:Silverstripe 如何在GridFieldDetailForm\u ItemRequest子类上实现表单?,silverstripe,Silverstripe,我想创建一个自定义的GridField操作,它将在弹出窗口中打开一个表单。以下是我所拥有的: <?php class CustomItemRequest extends GridFieldDetailForm_ItemRequest { private static $allowed_actions = array( 'edit', 'view', 'ItemEditForm', 'customaction',
<?php
class CustomItemRequest extends GridFieldDetailForm_ItemRequest
{
private static $allowed_actions = array(
'edit',
'view',
'ItemEditForm',
'customaction',
'CustomForm',
);
public function customaction($request) {
return $this->CustomForm()->forTemplate();
}
public function CustomForm()
{
$fields = new FieldList(
TextField::create('Name', 'Your Name')
);
$actions = new FieldList(
FormAction::create('doCustomAction')
);
$form = new Form($this, 'CustomForm', $fields, $actions);
return $form;
}
public function doCustomAction($data, $form, $request)
{
}
}
然后,我用一个定制的GridField\u ColumnProvider
将所有内容连接起来,它呈现到GridField的链接。我使用一些自定义Javascript在弹出窗口中加载表单:
$('.cms a.my-custom-link').entwine({
onclick: function (e) {
e.preventDefault();
var dialog = $('<div class="custom-dialog"/>');
dialog.ssdialog({iframeUrl: this.attr('href'), height: 300});
dialog.ssdialog('open');
}
});
$('.cms a.my-custom-link')。纠缠({
onclick:函数(e){
e、 预防默认值();
变量对话框=$('');
ssdialog({iframeUrl:this.attr('href'),高度:300});
dialog.ssdialog(“打开”);
}
});
到目前为止,一切正常。我可以单击GridField中的action链接,表单将在弹出窗口中打开。但是,由于表单在提交时将其操作添加到当前GridField操作中,因此路由似乎存在问题。这会产生如下URL:
<!doctype html>
<head>
<% base_tag %>
</head>
<body>
$CustomForm
</body>
</html>
http://localhost/admin/modeladmin/CustomDataObject/EditForm/field/CustomDataObject/item/1/admin/modeladmin/CustomDataObject/EditForm/field/CustomDataObject/item/1/CustomForm
这会触发以下错误:
操作“admin”在类CustomItemRequest上不可用。
在这种情况下,如何使表单路由工作?我是否需要一个自定义控制器,而根本不使用
GridFieldDetailForm\u ItemRequest
?这个问题其实很容易解决
而不是:
public function customaction($request) {
return $this->CustomForm()->forTemplate();
}
你应该做:
public function customaction($request) {
return $this->renderWith('MyCustomTemplate');
}
然后MyCustomTemplate.ss
应该如下所示:
<!doctype html>
<head>
<% base_tag %>
</head>
<body>
$CustomForm
</body>
</html>
$CustomForm
关键部分是包含
,这样相对表单操作URL就可以正常工作