在模型管理员自定义操作中重定向



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

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

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

例如 https://github.com/silverstripe/silverstripe-framework/blob/3.6/forms/gridfield/GridFieldDetailForm.php#L607

最新更新