2016-10-04 8 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-文字列を取得します。残念ながら、私は含まれているファイル(FAL)のPIDとUIDだけを取得します。どのようにして完全なオブジェクトを取得するか、含まれているファイルへのパスを取得することはできますか?

/** 
* 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'は、' getGettablePropertyNames() '(https://typo3.org/api/typo3cms/_object_access_8php_source.html#l00232)の呼び出しによって 'get_object_vars'を呼び出すことによって得ることができるものだけを処理します。 get_object_vars'を実行します。プロパティー 'properties'を出力してみてください。おそらくそれは役に立ちますか?これが正しいかどうかはわかりません。 – Jost

答えて

2

FileReferenceoriginalResourceに下降してみて、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

'Produkt'(この目的のために、おそらく非アクティブなJsonView)で' DebuggerUtility:var_dump'を実行してください。最初の項目( '$ this-> produktRepository-> findAll() - > getFirst()')をデバッグし、プロパティ 'originalResource'がそこで動作しているかどうかを確認してください – lorenz

0

originalResourceは、エンティティが自動的に取得されますゲッターメソッドを呼び出すには、部分的に計算されたプロパティである - それはそれはだ方法ですExtbaseのFileReferenceモデルで実装されています。

/** 
* @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,_exclude,_descend,_descendAll,_exposeObjectIdentifier,_exposedObjectIdentifierKey,_exposeClassNameです。

Flow documentationで詳細を確認してください。これはTYPO3 CMSのJsonViewでも有効です。

関連する問題