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中循环通过数组…如果我要在一个控制器中这样做,该控制器将变得非常大,并且项目来自不同的控制器。稍后将尝试扩展方法。谢谢