Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 共享模板内的自定义路由_Symfony_Model View Controller_Twig_Template Engine - Fatal编程技术网

Symfony 共享模板内的自定义路由

Symfony 共享模板内的自定义路由,symfony,model-view-controller,twig,template-engine,Symfony,Model View Controller,Twig,Template Engine,假设我有两个控制器,它们使用同一个实体,并且使用同一组模板。每个模板都应该生成按钮/表单/链接,其中包含指向生成此模板的控制器操作的URL。所以基本上,模板中唯一不同的是生成的URL 您可以想象这个问题,就像一个带有newAction和editAction的管理CRUD控制器,它们使用相同的模板,但表单操作必须不同。不过,我的情况比那更复杂 我考虑了以下几点: 从控制器设置路由,但感觉有很多代码不合适 不同的模板集。看起来像是反干性的,并且有很多重复使用的代码 使用模板继承,其中基本模板是包含

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

您可以想象这个问题,就像一个带有
newAction
editAction
的管理CRUD控制器,它们使用相同的模板,但表单操作必须不同。不过,我的情况比那更复杂

我考虑了以下几点:

  • 从控制器设置路由,但感觉有很多代码不合适
  • 不同的模板集。看起来像是反干性的,并且有很多重复使用的代码
  • 使用模板继承,其中基本模板是包含所有HTML的模板,子模板只包含链接,但感觉非常粗糙
有没有聪明的方法来解决这个问题

编辑:我的问题不是生成CRUD。这更像是一个“最佳实践”问题

我在实现类似eshop购物车的东西时遇到了这个问题,它绑定了大量javascript逻辑。它出现了两次:在网站上,在iframe中,由一些其他设备(iPad等)使用。两个Cart必须看起来相同,但由于逻辑不同,链接必须指向不同的URL

我现在要做的是有两个模板

包含所有标记的一个,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...
{% extends 'MyCartBundle::cart.html.twig' %}
{% set edit_cart_item = path('public_edit_cart_item') %}
{% set remove_cart_item = path('public_remove_cart_item') %}

在所有奇特的OOP原则中,这个问题有更好的解决方案吗?

实际上没有“聪明”的方法。为什么不直接使用指定的条令命令为您生成它,然后从那里开始呢

php应用程序/控制台生成:条令:crud
带有各种选项

这将使您以“适当”的方式完成坚实的基础,然后您可以执行自定义

编辑:

{% 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...
{% extends 'MyCartBundle::cart.html.twig' %}
{% set edit_cart_item = path('public_edit_cart_item') %}
{% set remove_cart_item = path('public_remove_cart_item') %}
在阅读了你的最新帖子后,我会看看以下内容:

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

通过设计,Symfony为您提供了很多灵活的操作方式。有关其最佳表单实践的参考资料,请参见:


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

看不清楚问题所在,您可以输入一些代码吗?你的项目的这一部分的结构也是吗?它不是关于crud生成的,我的案例比这更复杂一些。检查编辑的问题:)