Symfony EasyAdminBundle - 如何以实体形式添加自定义操作?

时间:2017-01-16 20:50:35

标签: php symfony symfony2-easyadmin

我在Symfony 3.1.9中使用EasyAdminBundle。

我设法自定义列表中的操作,这里也解释了: https://github.com/javiereguiluz/EasyAdminBundle/blob/master/Resources/doc/tutorials/custom-actions.md

但我没有找到在表单中添加自定义实体操作的任何文档。

我的目标是添加,靠近"保存","删除"和"返回列表"按钮,一个保存当前实体并重定向到当前编辑表单的按钮(不作为默认行为返回列表)。

entity form edit actions

提前谢谢

2 个答案:

答案 0 :(得分:1)

我的probalby做了一些脏东西,但它确实有用。

我已经覆盖了editAction:

public function editAction()
{
    $response = parent::editAction();

    if ($response instanceof RedirectResponse) {            

        $request = Request::createFromGlobals();
        return $this->redirect(urldecode($request->request->get('referer')));           
    }

    return $response;
}

方法$ this-> getCurrentEntity()未知。

我还覆盖了edit.html.twig,在jQuery的基本按钮旁添加了另一个按钮:

var cloned = $( "button.action-save" );
var clone = cloned.clone();
cloned.after(clone);
clone.addClass('action-save-stay')
clone.html('<i class="fa fa-save"></i>{{ 'action.save_stay'|trans }}');

$('.action-save-stay').bind('click', function(e) {
   e.preventDefault();
   $('input[name="referer"]').val(window.location.href);
   $('form').submit();
});

它更改名为referer的隐藏输入。 默认情况下,easyadmin重定向到查询字符串中包含的引用。

非常感谢你让我朝着正确的方向前进。

答案 1 :(得分:0)

Olivier如果您的目标只是重定向回相同实体表单的编辑操作,而不是重定向到列表操作。这很简单。我们假设您正在使用Product实体的新操作,并希望在保存新产品后重新编辑。

public function newProductAction()
{
    $response = parent::newAction();

    if ($response instanceof RedirectResponse) {

        $entity = $this->getCurrentEntity();

        return $this->redirectToRoute('admin', [
            'entity' => 'Product',
            'action' => 'edit',
            'id' => $entity->getId()
            'menuIndex' => 1
        ]);
    }

    return $response;
}

这里有2点要记住menuInde​​x是针对活动菜单类的,所以可以根据你的顺序进行更改。重定向路由'admin'应该是easyadmin后端路由。