我想創建一個自定義的GridField操作,它將在彈出窗口中打開一個窗體。下面是我有:如何在GridFieldDetailForm_ItemRequest子類上實現表單?
<?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)
{
}
}
在GridFieldConfig我這樣設置自定義請求處理程序:
$config->getComponentByType('GridFieldDetailForm')
->setItemRequestClass('CustomItemRequest');
然後我連線的一切了一個自定義GridField_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');
}
});
到目前爲止,一切工作正常。我可以單擊GridField中的action-link,並在彈出窗口中打開表單。但是,路由似乎存在問題,因爲表單在提交時將其操作添加到當前GridField操作。這導致在這樣一個URL:
http://localhost/admin/modeladmin/CustomDataObject/EditForm/field/CustomDataObject/item/1/admin/modeladmin/CustomDataObject/EditForm/field/CustomDataObject/item/1/CustomForm
這觸發以下錯誤:
Action 'admin' isn't available on class CustomItemRequest.
我怎麼能在這情況下,路由表的工作?我需要一個自定義控制器,並且根本不使用GridFieldDetailForm_ItemRequest
?