【问题标题】:Custom routes inside shared template共享模板内的自定义路由
【发布时间】:2014-12-12 14:49:51
【问题描述】:

假设我有两个控制器使用相同的实体,并使用相同的模板集。每个模板都应该生成带有 URL 的按钮/表单/链接,这些链接指向生成此模板的控制器的操作。所以基本上,模板中唯一不同的是生成的 URL。

您可以将问题想象为具有newActioneditAction 的管理员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


【解决方案1】:

真的没有“聪明”的方法。为什么不直接使用指定的 Doctrine 命令为您生成它,然后从那里开始呢? http://symfony.com/doc/current/bundles/SensioGeneratorBundle/commands/generate_doctrine_crud.html

php app/console generate:doctrine:crud 有多种选择

这将为您以“适当”的方式打下坚实的基础,然后您就可以进行自定义。

编辑:

阅读您更新的帖子后,我会看看这个:http://symfony.com/doc/current/book/forms.html#changing-the-action-and-method-of-a-form

因此,如果您愿意,您可以通过将选项传递给表单来处理要显示哪个表单的逻辑,然后通过setAction() 设置目标:

$form = $this->createFormBuilder($task)
    ->setAction($this->generateUrl('target_route'))
;

通过设计,Symfony 为您提供了很大的灵活性来做事。可以在此处找到有关表单最佳实践的良好参考:http://symfony.com/doc/current/best_practices/forms.html

我也认为你正在做的很好。当我有复杂的表单案例时,我喜欢为表单本身创建一个 Twig 模板,然后将其包含在我的其他模板中。如果您愿意,可以在该模板中将目标路由传递给它,然后您就只有一个表单模板。

【讨论】:

  • 这不是关于 crud 的生成,我的情况比这复杂一点。检查编辑的问题:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-03
  • 1970-01-01
相关资源
最近更新 更多