Symfony 如何";洗牌;包括来自细枝的

Symfony 如何";洗牌;包括来自细枝的,symfony,twig,Symfony,Twig,我有一个包含多个子模板的基本模板,代码运行如下: <ul class="row portfolio list-unstyled mt-3 lightbox" id="grid"> <!-- summary section --> {{ render(controller('App\\Controller\\ReadController::summary')) }} {{ ren

我有一个包含多个子模板的基本模板,代码运行如下:

<ul class="row portfolio list-unstyled mt-3 lightbox" id="grid">
                <!-- summary section -->
                {{ render(controller('App\\Controller\\ReadController::summary')) }}
                {{ render(controller('App\\Controller\\BookController::random', {num: 3})) }}
                {{ render(controller('App\\Controller\\WikiController::random')) }}

</ul><!-- / portfolio row -->
    {{呈现(控制器('App\\controller\\ReadController::summary'))} {{render(controller('App\\controller\\BookController::random',{num:3}))} {{呈现(控制器('App\\controller\\WikiController::random'))}
可以看出,这些“项目”以固定顺序出现:
summary
首先出现,然后是3个
random
,然后是一个
random

我打算做的是“洗牌”这些项目(在上面的代码片段中,将有5个项目),以便在每次刷新中顺序不同,从而给最终用户一些变化

这可以在小树枝上做吗

更新


我使用了@hcoat方法,它正在工作。稍后将尝试洗牌过滤器

根据上面评论中的建议,您可以使用或通过控制器发送。我认为拥有一个随机发送列表的控制器是最好的选择

但是,有时使用标准细枝将列表随机化很有用,在这种情况下,您可以执行以下操作:

// Path and pram Array, pass empty hash if no params
{% set arr = [
  ["App\\Controller\\ReadController::summary", {}],
  ["App\\Controller\\BookController::random", {'num': 3}],
  ["App\\Controller\\WikiController::random", {}]
] %}
// create a list and merge arr array with random key
{% set list = {} %}
{% for item in arr %}
    // There is a bug in some twig verions
    // so concat a letter to ensure random key works
    {% set list = list|merge({ (random()~'a'):(item) }) %}
{% endfor %}
// sort the list by the random key and render the output
{% for key in list|keys|sort %}
    {{ render(controller(list[key][0], list[key][1])) }}
{% endfor %}

现在,子模板将以随机顺序呈现。

为什么不在控制器中执行此操作?不管怎样,你可以做一些像
{%set items=[render(…)、render(…)、render(…)、]%}
这样的事情,然后像DarBee说的那样将它们洗牌,你应该在控制器中这样做,然后在twig中循环通过数组…如果我要在一个控制器中这样做,该控制器将变得非常大,并且项目来自不同的控制器。稍后将尝试扩展方法。谢谢