Silverstripe - 在模板中循环非关联数组

dan*_*oks 9 php silverstripe

如何在模板内完成?我用ArrayData使用模板循环中的键来访问模板中的值,但是如果我有一个没有键的任意字符串数组,我用什么变量来访问这些值?

如果在我的控制器中我有这个:

public function ArrayList()
{
    $ArrayList = new ArrayList(array('this', 'is', 'a', 'test'));
    return $ArrayList;
}
Run Code Online (Sandbox Code Playgroud)

这在我的模板中:

<% loop $ArrayList %>1<% end_loop %>
Run Code Online (Sandbox Code Playgroud)

为了让模板吐出"这是一个测试",我应该用1来代替1?

Zau*_*sch 14

据我所知这是不可能的,你需要将每个项目包装到一个ArrayData对象中

public function ArrayList()
{
    $ArrayList = ArrayList::create(array(
        ArrayData::create(array('Text' => 'this')),
        ArrayData::create(array('Text' => 'is')),
        ArrayData::create(array('Text' => 'a')),
        ArrayData::create(array('Text' => 'test')),
    ));
    return $ArrayList;
}
Run Code Online (Sandbox Code Playgroud)

和模板:

<% loop $ArrayList %>$Text<% end_loop %>
Run Code Online (Sandbox Code Playgroud)

//注意:___::create()new ___()类固醇


小智 7

ArrayData您可以使用,而不是每次都创建一个新实例$Me.所以你会:

public function ArrayList()
{
    $ArrayList = new ArrayList(array('this', 'is', 'a', 'test'));
    return $ArrayList;
}
Run Code Online (Sandbox Code Playgroud)

并且,在您的模板中:

<% loop $ArrayList %>$Me<% end_loop %>
Run Code Online (Sandbox Code Playgroud)

$Me指循环中的当前项.在这种情况下,它将是数组中的字符串.