如何在SilverStripe中使用模板中的参数调用函数

时间:2016-02-19 04:46:55

标签: php templates silverstripe function-calls

假设我有以下功能:

function fruit ($request) {
    ...
    $response = array('apple' => '1dollars', 'mango' => '2dollars');
    return json_encode($response);
}

我想在模板中访问类似$response.apple的内容。

我尝试过以下操作,但这不起作用,因为我的页面上没有显示任何内容:

<% control response %>
    <h1>$response.apple<h2>;
<% end_control %>

如果我尝试从模板中访问函数fruitfruit给我一个错误。 fruit(request)也给了我一个错误。

但是,如果我去结果我的数据绝对正确:

["apple":"1dollar","mango":"2dollar"]

1 个答案:

答案 0 :(得分:1)

你需要做两件事:

  1. 如果希望在模板中访问数据数组,则必须将数据数组包装在ArrayData或ArrayList对象中。
  2. 您必须返回原始数组(在这种情况下,模板ControllerName_actionName.ss将自动呈现)或显式返回呈现的模板。
  3. 更像是:

    function fruit ($request) {
        ...
        return $this->customise(array(
            'response' => new ArrayData(array(
                'apple' => '1dollars', 
                'mango' => '2dollars'
            ));
        ))->renderWith(array('YourTemplate'));
    }
    

    请注意,“响应”的命名在那里完全是任意的。另一种可行的方法是在控制器上使用“响应”方法(显然我会将其命名为不同的名称,我只是为了清晰起见而保留名称):

    public function response() {
        return new ArrayData(array(
                'apple' => '1dollars', 
                'mango' => '2dollars'
            ));
    }
    

    在这种情况下,您只需在操作中返回以下内容:

    return $this->renderWith(array('MyTemplate'));