【问题标题】:Render a different view from the same action in Symfony2在 Symfony2 中从相同的动作渲染不同的视图
【发布时间】:2015-10-18 21:42:52
【问题描述】:

我正在使用 Symfony2 开发一个小型系统,我遇到了一种情况,我需要复制相同的 editAction,但只更改它呈现的 view

我使用此操作来编辑页面中列出的所有已注册预算的基本信息。我有一个列出所有无效预算的特殊页面,我想要一个不同的编辑页面来更改某些状态并添加日期。

如何使用相同的 editAction 根据 URL 呈现不同的视图?列出所有预算的页面是/budgets,不活动的页面是/budgets/inactive

【问题讨论】:

    标签: symfony controller views


    【解决方案1】:

    使用类似的东西:

    /**
     * @Route("/budgets/{active}", defaults={"active" = "active"})
    */ 
    public function editAction($active)
    { 
        // ... 
    }
    

    然后,当您转到/budgets时,$active 将是“活动的”,而当您转到/budgets/inactive 时,$active 将是“不活动的”。然后您可以使用此变量来决定显示哪个模板

    更多信息在这里: http://symfony.com/doc/current/book/routing.html#required-and-optional-placeholders

    【讨论】:

    • 它有效,但是当我按下按钮时,页面被重定向到常规编辑页面并且不保存任何内容。
    • 我没有给你一个完整的解决方案,只是一个指针。显然,正如弗兰克宾在下面指出的那样,您还必须考虑许多其他事情。在重定向到同一页面的情况下,显然你需要在从每个视图重定向时放置正确的 url,这在我发送给你的 Symfony 书籍页面中进行了说明
    【解决方案2】:

    Carlos 的回答很好,谢谢,但编辑操作还需要验证,然后在同一页面上出现错误或对有效表单进行某种操作。所以我想说即使是简单的形式也有点复杂。当您还进行“两个视图”操作时,它会变得复杂 2 * 2 = 4 倍。除此之外,$active 变量可以具有任何值,而不仅仅是“活动”或您想要的“非活动”。它可能是“笑话”、“愚蠢”和更多的可能性。我的建议是添加第二个操作并使用私有函数来实现适合两种表单的功能,或者使用处理表单的 custum 类(或服务)。

    【讨论】:

    • 这不应该是一个答案,而是对我的答案的评论。我同意你说的很多事情。我不想提供一个完整的解决方案,只是一个让这个用户朝着正确方向思考的指针
    猜你喜欢
    • 2013-04-02
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多