1

保存实体后如何保持编辑表单而不重定向到列表视图?我尝试了一些动作,但似乎没有任何效果。

4

1 回答 1

3

EasyAdmin 在 AdminController.php 的“redirectToReferrer()”方法中硬编码了重定向行为。重定向规则的顺序是:

  1. 如果可能,重定向到列表
  2. 从新|编辑操作,如果可能,重定向到编辑
  3. 从新动作,如果可能,重定向到新动作
  4. 其他:重定向到主页

你想要的是用第一条规则切换第二条规则。

您可以通过扩展 AdminController.php 并使用您自己的逻辑覆盖方法“redirectToReferrer()”并更改重定向规则的顺序来做到这一点。

为了减少侵入性,您可以通过以下方式覆盖它:

/**
 * @return \Symfony\Component\HttpFoundation\RedirectResponse
 */
protected function redirectToReferrer()
{
    $refererAction = $this->request->query->get('action');

    // from new|edit action, redirect to edit if possible
    if (in_array($refererAction, array('new', 'edit')) && $this->isActionAllowed('edit')) {
        return $this->redirectToRoute('easyadmin', array(
            'action' => 'edit',
            'entity' => $this->entity['name'],
            'menuIndex' => $this->request->query->get('menuIndex'),
            'submenuIndex' => $this->request->query->get('submenuIndex'),
            'id' => ('new' === $refererAction)
                ? PropertyAccess::createPropertyAccessor()->getValue($this->request->attributes->get('easyadmin')['item'], $this->entity['primary_key_field_name'])
                : $this->request->query->get('id'),
        ));
    }

    return parent::redirectToReferrer();
}

这样,首先应用您的规则,如果它与原始重定向规则不匹配,则应用。您还可以在此处添加消息以确认实体已成功保存。

于 2018-07-05T13:59:58.397 回答