在ModelAdmin自定义操作中重定向

时间:2018-01-02 23:46:30

标签: php redirect silverstripe

我通过DataObject管理ModelAdmin我添加了自定义按钮,因为我想在添加项目时执行自定义操作。

class InventoryAdmin extends ModelAdmin {

    public function getEditForm($id = null, $fields = null) {
        $form = parent::getEditForm($id, $fields);
        $listField = $form->Fields()->fieldByName($this->modelClass);
        if ($gridField = $listField->getConfig()->getComponentByType('GridFieldDetailForm'))
            $gridField->setItemRequestClass('InventoryFieldDetailForm_ItemRequest');

        return $form;
    }
}

class InventoryFieldDetailForm_ItemRequest extends GridFieldDetailForm_ItemRequest {

    private static $allowed_actions = array (
        'edit',
        'view',
        'ItemEditForm'
    );

    public function ItemEditForm() {
        $form = parent::ItemEditForm();
        $formActions = $form->Actions();
        $formActions->removeByName('action_doSave');
        if ($actions = $this->record->getCMSActions()) {
            foreach ($actions as $action) {
                $formActions->push($action);
            }
        }
        return $form;
    }

    public function doAddInventoryItem($data, $form) {
        return Controller::curr()->redirect($this->getToplevelController()->Link());
    }
}

这适用于提交时,CMS会返回到父级,并且它会偏移大约15像素。主要问题是CMS UI从此一直没有响应,直到刷新。

我应该将哪些内容重定向到父ModelAdmin

1 个答案:

答案 0 :(得分:1)

GridFieldDetailForm_ItemRequest类具有函数getBacklink,该函数应提供指向上一屏幕的链接。

然后,您可以使用getToplevelController获取控制器并设置以下标头以强制刷新内容。

$controller = $this->getToplevelController();
$controller->getRequest()->addHeader('X-Pjax', 'Content'); // Force a content refresh

return $controller->redirect($this->getBacklink(), 302); //redirect back to admin section

E.g。 https://github.com/silverstripe/silverstripe-framework/blob/3.6/forms/gridfield/GridFieldDetailForm.php#L607

相关问题