2016-05-06 2 views
0

Я пытаюсь передать массив в моем Viewhelper на Fluidtemplate. Он всегда показывает строку «Массив». Если я попытаюсь использовать его как параметр в режиме просмотра f:for each, я получаю исключение, потому что это строка, а не массив. Я использовал Typo3 6.2 раньше, теперь у меня есть Typo3 7, и он перестает работать.TYPO3 возвращает «Array» в Fluid as String

public function render($uids) { // $uids='901,902,903' 
    $uidArray = explode(',', $uids); 

    $objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager'); 
    $repository = $objectManager->get('XXX\\X\\Domain\\Repository\\FooRepository'); 
    $query = $repository->createQuery(); 
    $query->getQuerySettings()->setRespectStoragePage(FALSE); 
    $query->matching(
     $query->in('uid', $uidArray) 
    ); 
    return $query->execute()->toArray(); 
} 

Это мой Fluid шаблон:

{namespace vh=My/Namespace/ViewHelpers} 
<f:for each="{vh:GetArray(uids: '901,902,903')}">...</f:for> 
+0

Что вы получаете, если передаете свой взгляд на отладочный режим? – pgampe

+0

Что-то вроде этого: 'Array' String (5) – ellei

+0

Это означает, что ваш массив уже отправлен в строку перед возвратом viewhelper. – pgampe

ответ

1

Вы не можете вернуть массив с помощью средства просмотра, потому что viewhelper всегда возвращает строки.

Однако вы можете ввести новую переменную в текущий контекст визуализации, а затем использовать эту переменную в своем средстве просмотра.

public function render() { 
    $returnArray = array('a' => 17, 'b' => 42); 
    $this->templateVariableContainer->add('returnArray', $returnArray); 
    $output = $this->renderChildren(); 
    $this->templateVariableContainer->remove('returnArray'); 
    return $output; 
} 

Внутри шаблона вы можете запустить цикл над {returnArray}.

+0

это работает, THX! просто не понимаю, почему они изменили его таким образом. Можно было вернуть массив непосредственно в жидкость – ellei

0

Попробуйте сочетание f:for и f:cycle в вашем Fluid шаблоне. См. f:cycle examples в Справочнике Fluid ViewHelper.

+0

Это не сработает, потому что я не могу использовать viewhelper, который ожидает массив как параметр. Возвращаемое значение my viewhelper - это строка, а не массив. – ellei

Смежные вопросы