Как вызвать функцию с аргументами из шаблона в SilverStripe

Допустим, у меня есть следующая функция:

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

Я хочу получить доступ к чему-то вроде $response.apple внутри моего шаблона.

Я пробовал следующее, но это не работает, так как на моей странице ничего не отображается:

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

Если я пытаюсь получить доступ к функции fruit из моего шаблона,
fruit давая мне ошибку. fruit(request) также дает мне ошибку.

Но если я иду к плоду, который возвращает мои данные абсолютно нормально:

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

0

Решение

Вам нужно сделать две вещи по-разному:

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

Обратите внимание, что наименование «response» там совершенно произвольно. Другой возможный способ сделать это — сделать «ответ» методом на вашем контроллере (очевидно, я бы назвал его чем-то другим, я просто сохраню ваши имена для ясности):

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

В этом случае вы можете просто вернуть следующее в вашем действии:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]