【发布时间】:2014-12-12 14:49:51
【问题描述】:
假设我有两个控制器使用相同的实体,并使用相同的模板集。每个模板都应该生成带有 URL 的按钮/表单/链接,这些链接指向生成此模板的控制器的操作。所以基本上,模板中唯一不同的是生成的 URL。
您可以将问题想象为具有newAction 和editAction 的管理员CRUD 控制器,它们使用相同的模板,但表单操作必须不同。不过,我的情况比这更复杂。
我考虑过:
- 从控制器设置路由,但是感觉好多代码不合适。
- 不同的模板集。看起来像反 DRY 和大量重用代码。
- 使用模板继承,其中基模板是包含所有 HTML 的模板,子模板只包含链接,但感觉真的很 hacky。
有解决这个问题的聪明方法吗?
编辑:我的问题是没有生成 CRUD。这更像是一个“最佳实践”问题。
我在实现诸如绑定大量 JavaScript 逻辑的 eshop 购物车之类的东西时遇到了这个问题。它出现了两次:在网站中,在 iframe 中,由其他一些设备(iPad 和其他设备)使用。两个购物车必须看起来相同,但由于逻辑不同,链接必须指向不同的 URL。
我现在最终做的是拥有 2 个模板
带有所有标记的那个,cart.html.twig:
{% set edit_cart_item = path('edit_cart_item') %}
{% set remove_cart_item = path('remove_cart_item') %}
...html...
<a href="{{ edit_cart_item }}">Edit item</a>
...more html...
在iframe中使用,public_cart.html.twig:
{% extends 'MyCartBundle::cart.html.twig' %}
{% set edit_cart_item = path('public_edit_cart_item') %}
{% set remove_cart_item = path('public_remove_cart_item') %}
在所有花哨的 OOP 原则中是否有更好的解决方案?
【问题讨论】:
-
看不清楚问题,可以放一些代码吗?你项目这部分的结构也是?
标签: symfony model-view-controller twig template-engine