【问题标题】:Is there any way to pass some variables through ResourceController to template in Sylius?有没有办法通过 ResourceController 将一些变量传递给 Sylius 中的模板?
【发布时间】:2014-09-10 01:14:58
【问题描述】:

我需要覆盖 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 传递给products 之外的模板SyliusWebBundle:Frontend/Product:latest

我尝试覆盖 ProductBundleResourceBundle... 但是使用自定义操作覆盖控制器(我不想覆盖 indexActionshowAction)让我无处可去。 PHP 根本没有击中我的控制器。相反,它击中了ResourceBundleshowAction。而且,是的,我覆盖了路由以指向我的控制器。

如果我用新路由覆盖 ProductController 并在我的模板中使用它会引发异常:

在渲染模板期间引发了异常 (URI 的“控制器”sylius.controller.product:partialAction“ "/partial" 不可调用。") 在 SyliusWebBundle:Frontend/Product:show.html.twig 在第 136 行。

当我将 _controller 更改为以标准 Symfony 方式指向我的控制器时,我遇到了下一个异常:

可捕获的致命错误:参数 1 传递给 Sylius\Bundle\ResourceBundle\Controller\ResourceController::__construct() 必须是 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 行

【问题讨论】:

  • 这是分页问题?也许您可以尝试使用 pagerfanta 来完成这项工作?使用控制器中的“MaxPerPage”值
  • 这与分页无关。

标签: php symfony sylius


【解决方案1】:

你可以用这两种方法..

控制器

您可以像使用任何其他控制器一样扩展控制器并将变量传递到模板中。

请求

您可以通过 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

【讨论】:

  • 我描述了覆盖控制器并不像看起来那么容易。也许有一些监听器可以捕捉和处理一些动作或其他任何事情。但是第二种方法很棒。我完全忘记了 twig 及其对 app-container 的访问。谢谢。
  • 不用担心...虽然扩展控制器很容易,但您的错误似乎暗示扩展控制器没有设置partialAction 方法。您是在扩展基本产品控制器还是只是添加自己的?话虽这么说,我认为这对你的问题来说是多余的。
  • partialAction 存在并且我扩展了基本控制器。问题不是很清楚......我有一个可行的解决方案,现在不需要覆盖。
  • 不,一点也不。我同意。
  • 谢谢!这些是唯一的解决方案,这让我很烦恼。为什么有人会创建这样一个系统,简单地说,你是一个 yaml 开发人员,却没有考虑这样一个简单而常见的问题……
猜你喜欢
  • 1970-01-01
  • 2021-05-12
  • 2016-08-26
  • 2019-08-18
  • 1970-01-01
  • 2012-12-24
  • 1970-01-01
  • 2021-02-07
  • 1970-01-01
相关资源
最近更新 更多