我需要覆盖sylius_partial_product_latest
路由的行为,以使能力渲染模板具有附加参数。
简单的例子:在不同的页面上,我需要一次显示2到4个产品,轮播滚动4-8个产品。现在我在SyliusWebBundle:Frontend/Product:latest
模板中:
{{ grid(products) }}
但在某些情况下我需要:
{{ grid(products, 2) }}
在其他人:
{{ grid(products, 3) }}
{# or it can be 4 or any other number #}
现在在模板中我只有products
var(它由资源机制提供),我可以将变量传递到存储库,我可以将它添加到我的products
数组中,但它不是一个好的办法。它可以通过简单地将变量传递给查询来实现:
{{ render(url('sylius_partial_product_latest', {'size': 3, 'limit': 2, 'template': 'SyliusWebBundle:Frontend/Product:latest.html.twig'})) }}
我需要能够将变量size
传递到SyliusWebBundle:Frontend/Product:latest
之外的模板products
。
我尝试覆盖ProductBundle
和ResourceBundle
...但是使用自定义操作覆盖控制器(我不想覆盖indexAction
或showAction
)导致我无处可去。 PHP根本没有打到我的控制器。相反,它会点击showAction
的{{1}}。而且,是的,我覆盖路由指向我的控制器。
如果我用新路由覆盖ResourceBundle
并在我的模板中使用它会抛出异常:
在渲染模板期间抛出了异常 (URI的“Controller”sylius.controller.product:partialAction“ “/ partial”不可调用。“)in SyliusWebBundle:前端/产品:第136行的show.html.twig。
当我更改ProductController
以标准Symfony方式指向我的控制器时,我有下一个例外:
可捕获的致命错误:参数1传递给 Sylius \捆绑\的ResourceBundle \控制器\ ResourceController :: __构建体() 必须是一个实例 Sylius \ Bundle \ ResourceBundle \ Controller \ Configuration,没有给出, 呼唤 /Users/mihail/Sites/magazin/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/ControllerResolver.php 在第77行并在中定义 /Users/mihail/Sites/magazin/vendor/sylius/sylius/src/Sylius/Bundle/ResourceBundle/Controller/ResourceController.php 第63行
答案 0 :(得分:2)
你有两种方法可以解决这个问题..
<强>控制器强>
您可以扩展控制器并将变量传递到模板中,就像使用任何其他控制器一样。
请求强>
您可以通过GET参数将变量传递给您的控制器作为您的..
之类的请求{{ render(url('sylius_partial_product_latest', {'size': 3, 'limit': 2, 'template': 'SyliusWebBundle:Frontend/Product:latest.html.twig'})) }}
..然后使用请求对象(如..
)在模板中获取{{ grid(product, app.request.get('size')) }} // with a default or null