控制器和URL的设计思路 - Symfony2

时间:2012-08-07 11:09:14

标签: php symfony

我有一个页面(让我们称之为编辑页面)有两种形式 - 第一种用于更新数据库中一个表中的信息,它有一个提交按钮“保存”,另一个用于另一个表中的持久信息它有自己的按钮“添加”和一个链接 - “删除”删除现有的行。无论您按三,保存,添加或删除,您都应该停留在同一页面。能否请您告诉我哪种方式最好:

  1. 当你按删除时,我正在路由到另一个调用deleteController的url,在该主体中,它重定向回到上一页(编辑页面)

    我无法想出更好的东西,因为删除是一个链接。请随意提出您的建议,并告诉我的方式是非常愚蠢还是可以接受。

  2. 如何管理这两种形式?

    1. 起初我认为一个控制器可以管理这两种形式,但是存在一个问题 - 我不知道控制器如何确切地确定按下哪个按钮(保存或添加)来做正确的事情。它可以每次更新两个表,就像按下两个按钮一样,但我认为这是不合理的,因为大多数时候只有一个表会有变化。

    2. 另一个想法是重复删除 - 有两个不同的控制器,可以做一些操作(更新和持久),然后重定向到编辑页面,我瞄准用户感觉永远不会离开开头页面的网址(编辑页面)。

  3. 管理此任务的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

SensioGeneratorBundle可以生成CRUD表单和控制器。它在Symfony标准版中提供。你应该看看它。生成的代码很容易定制,并且设计得很好。


  1. 您做出了正确的选择。您也可以将删除按钮放入包含method="delete"的表单中,并在控制器中执行以下操作:

    /**
     * @Route("/{id}")
     * @Method("DELETE")
     * @ParamConverter("entity", class="MyAdminBundle:MyEntity")
     */
    public function deleteAction(MyEntity $entity)
    {
        // Do deletion
        // ...
    
        // Do redirection
        $this->redirect($this->generateUrl('list'));
    }
    
  2. 您可以设置不同的method(版本:POST,创建:PUT)。
    您可以设置不同的action,然后执行重定向。