2016-05-04 6 views
1

ポップアップでフォームを開くカスタム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はまったく使用しませんか?

答えて

1

問題は実際に解決するのが簡単です。

の代わりに:

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> 

キー部分は<% base_tag %>を含めることで、相対的なフォームアクションURLが必要に応じて機能するようにします。

関連する問題