有没有办法通过ResourceController将一些变量传递给Sylius中的模板?

时间:2014-07-18 19:54:16

标签: php symfony sylius

我需要覆盖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

我尝试覆盖ProductBundleResourceBundle ...但是使用自定义操作覆盖控制器(我不想覆盖indexActionshowAction)导致我无处可去。 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行

1 个答案:

答案 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