ポップアップでフォームを開くカスタムGridFieldアクションを作成したいと思います。ここで私が持っているものです。GridFieldConfigオン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)
{
}
}
私はこのようなカスタム要求ハンドラ設定:
$config->getComponentByType('GridFieldDetailForm')
->setItemRequestClass('CustomItemRequest');
をそして私はGridFieldへのリンクを表示するカスタムGridField_ColumnProvider
ですべてを配線してください。私はいくつかのカスタム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のアクションリンクをクリックすると、ポップアップにフォームが表示されます。しかし、フォームは送信時に現在のGridFieldアクションにそのアクションを追加するので、ルーティングに問題があるようです。
http://localhost/admin/modeladmin/CustomDataObject/EditForm/field/CustomDataObject/item/1/admin/modeladmin/CustomDataObject/EditForm/field/CustomDataObject/item/1/CustomForm
をそして、これは次のエラートリガー:これは、このようなURLになり
Action 'admin' isn't available on class CustomItemRequest.
がどのように私はこのときのフォームルーティング作業を行うことができますか?カスタムコントローラが必要ですか?GridFieldDetailForm_ItemRequest
はまったく使用しませんか?