在 ModelAdmin 自定义操作中重定向
Redirect in ModelAdmin custom action
我正在通过 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
class 具有函数 getBacklink
,它应该为上一个屏幕提供 link。
然后您可以使用 getToplevelController
获取控制器并设置以下 header 以强制刷新内容。
$controller = $this->getToplevelController();
$controller->getRequest()->addHeader('X-Pjax', 'Content'); // Force a content refresh
return $controller->redirect($this->getBacklink(), 302); //redirect back to admin section
我正在通过 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
class 具有函数 getBacklink
,它应该为上一个屏幕提供 link。
然后您可以使用 getToplevelController
获取控制器并设置以下 header 以强制刷新内容。
$controller = $this->getToplevelController();
$controller->getRequest()->addHeader('X-Pjax', 'Content'); // Force a content refresh
return $controller->redirect($this->getBacklink(), 302); //redirect back to admin section