【问题标题】:How to call a function with arguments from template in SilverStripe如何在 SilverStripe 中使用模板中的参数调用函数
【发布时间】:2023-12-09 05:56:01
【问题描述】:

假设我有以下功能:

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"]

【问题讨论】:

    标签: php templates silverstripe function-calls


    【解决方案1】:

    你需要做两件不同的事情:

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

    更像是:

    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'));
    

    【讨论】: