2016-10-04 4 views
1

Это мой контроллер Действие:TYPO3 Extbase JsonView FAL

public function jsonAction() 
{ 
    $this->view->setVariablesToRender(array('produkte')); 
    $this->view->setConfiguration(
     array(
      'produkte' => array(
       '_descendAll' => array(
        'only' => array('titel', 'beschreibung', 'bild', 'download', 'categories'), 
        '_descend' => array(
         'bild' => array(), 
         'download' => array(), 
         'categories' => array(), 
        ) 
       ) 
      ) 
     ) 
    ); 

    $this->view->assign('produkte', $this->produktRepository->findAll()); 
} 

и я получаю очень хороший JSON-строку. К сожалению, я получаю только PID и UID для содержащихся файлов (FAL). Как я могу получить полный объект или, по крайней мере, путь к содержащимся файлам?

/** 
* Returns the bild 
* 
* @return \TYPO3\CMS\Extbase\Domain\Model\FileReference $bild 
*/ 
public function getBild() 
{ 
    return $this->bild; 
} 

/** 
* Returns the download 
* 
* @return \TYPO3\CMS\Extbase\Domain\Model\FileReference $download 
*/ 
public function getDownload() 
{ 
    return $this->download; 
} 
+0

Можете ли вы рассказать о соответствующих частях модели Produkt? – lorenz

+0

ok, редактировать выше. Надеюсь, это правильная часть. – hydrococcus

+0

Я подозреваю, что это связано с тем, что свойства объектов ссылки на файлы и файлы не являются реальными объектными свойствами, но хранятся как лениво загруженный ассоциативный массив (с именем 'properties', я думаю). 'JsonView' обрабатывает только те, которые он может получить, вызывая' get_object_vars' (через вызов [getGettablePropertyNames()] (https://typo3.org/api/typo3cms/_object_access_8php_source.html#l00232)), который использует ' get_object_vars'. Попробуйте вывести свойство 'properties', может быть, это поможет? Не уверен, что это правильно. – Jost

ответ

2

Попробуйте спускаясь к originalResource в FileReference и разоблачить publicUrl:

$this->view->setConfiguration(
    array(
     'produkte' => array(
      '_descendAll' => array(
       'only' => array('titel', 'beschreibung', 'bild', 'download', 'categories'), 
       '_descend' => array(
        'download' => array(
         '_descendAll' => array(
          '_only' => array('originalResource'); 
          '_descend' => array(
           'originalResource' => array(
            '_only' => array('publicUrl'); 
           ); 
          ); 
         ); 
        ), 
       ) 
      ) 
     ) 
    ) 
); 
+0

Спасибо, я попробую. Но, к сожалению, эффекта нет. Только PID и UID. – hydrococcus

+0

Пожалуйста, сделайте 'DebuggerUtility: var_dump' на' Produkt' (возможно, для этого используется JsonView), например. отладить первый элемент ('$ this-> produktRepository-> findAll() -> getFirst()') и посмотреть, работает ли там свойство 'originalResource' – lorenz

0

originalResource частично вычисленная свойство, на вызове геттер-метода предприятие будет извлекаться автоматически - это, как это реализован в модели FileReference модели Extbase.

/** 
* @return \TYPO3\CMS\Core\Resource\FileReference 
*/ 
public function getOriginalResource() 
{ 
    if ($this->originalResource === null) { 
     $this->originalResource = \TYPO3\CMS\Core\Resource\ResourceFactory::getInstance()->getFileReferenceObject($this->getUid()); 
    } 

    return $this->originalResource; 
} 

Однако, пожалуйста, не забудьте правильно написать конфигурацию представления JSON. Все связанные с управлением свойства являются префиксами с подчеркиванием _ - в приведенных выше примерах кода это должно быть _only вместо only. Допустимые контрольные имена: _only, _exclude, _descend, _descendAll, _exposeObjectIdentifier, _exposedObjectIdentifierKey, _exposeClassName.

Более подробную информацию можно найти в Flow documentation, который по-прежнему действует для JsonView в TYPO3 CMS.

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