2014-11-04 38 views
1

我創建了一個可以顯示益智遊戲的小擴展。我製作的可切換控制器動作包括列表/顯示(正常工作),管理員(也很好),並且只顯示。僅在Extbase中使用flexform顯示單個項目

僅供顯示我想從flexform中選擇一個數據庫項,然後通過單個視圖顯示。對於我添加了一個新的領域的柔性成型:

   <settings.singlePuzzle> 
        <TCEforms> 
         <label>Puzzle to show</label> 
         <config> 
          <type>select</type> 
          <foreign_table>tx_wspuzzle_domain_model_puzzle</foreign_table> 
          <items> 
           <numIndex index="0" type="array"> 
            <numIndex index="0">-- Choose --</numIndex> 
            <numIndex index="1"></numIndex> 
           </numIndex> 
          </items> 
          <size>1</size> 
          <maxitems>1</maxitems> 
          <minitems>0</minitems> 
         </config> 
        </TCEforms> 
       </settings.singlePuzzle> 

到目前爲止好,如果我看來,選擇正確的ID列表視圖中選擇這裏的項目和調試。

現在我在控制器改變的showAction看起來像這樣:

/** 
* action show 
* 
* @param \Websafari\Wspuzzle\Domain\Model\Puzzle $puzzle 
* @return void 
*/ 
public function showAction(\Websafari\Wspuzzle\Domain\Model\Puzzle $puzzle = NULL) { 
    if(is_null($puzzle)) $puzzle = $this->puzzleRepository->findByUid($this->settings['singlePuzzle']); 

    $this->view->assign('puzzle', $puzzle); 
} 

所以,現在我改變了行動,「只顯示」,選擇「singlePuzzle」的條目,然後(我認爲)我應該很好走,但我得到的是以下錯誤:

Required argument "puzzle" is not set. 

顯然我犯了一個錯誤,但我不明白。

第一:爲什麼仍然需要「拼圖」?這就是爲什麼我添加「= NULL」的功能(我也嘗試添加@ignorevalidation $益智評論)。

第二:爲什麼沒有設置?當我調試「$ this-> settings ['singlePuzzle'];」我得到一個拼圖對象的ID。

如果有人能指出我的錯誤,會很好,因爲我真的被困在這裏。 Thnx很多!

+0

一個臨時的解決方案是一個空的參數添加到URL這樣tx_wspuzzle_puzzle [益智]。這工作正常。我非常感謝所有進入extbase的工作,但有時候會有奇怪的事情發生。 – 2014-11-04 15:20:46

回答

1

問題是一個類(參數等)的反射信息被緩存在Extbase中。因此,如果您更改了定義並且不清除相應的緩存,它仍然需要您的參數。

您需要清除TYPO3中的「系統緩存」。有三種方法可以做到這一點:

  • 如果您在development context,您將在後端有按鈕(與紅色閃光燈圖標)。
  • 您可以使用​​在生產環境中通過用戶TSconfig啓用該按鈕。
  • 清除系統緩存的按鈕位於安裝工具的「重要操作」一節中。

您也可以手動清除所有緩存在phpMyAdmin

TRUNCATE table cf_cache_hash; 
TRUNCATE table cf_cache_hash_tags; 
TRUNCATE table cf_cache_pages; 
TRUNCATE table cf_cache_pagesection; 
TRUNCATE table cf_cache_pagesection_tags; 
TRUNCATE table cf_cache_pages_tags; 
TRUNCATE table cf_cache_rootline; 
TRUNCATE table cf_cache_rootline_tags; 
TRUNCATE table cf_extbase_object; 
TRUNCATE table cf_extbase_object_tags; 
TRUNCATE table cf_extbase_reflection; 
TRUNCATE table cf_extbase_reflection_tags; 
TRUNCATE cf_extbase_typo3dbbackend_queries; 
TRUNCATE cf_extbase_typo3dbbackend_queries_tags; 
TRUNCATE cf_extbase_typo3dbbackend_tablecolumns; 
TRUNCATE cf_extbase_typo3dbbackend_tablecolumns_tags; 
TRUNCATE cf_extbase_datamapfactory_datamap; 
TRUNCATE cf_extbase_datamapfactory_datamap_tags; 

相關表這也截斷查詢緩存等什麼可以在某些情況下非常有用。

只要緩存被清除,它應該工作。

順便說一句,只是爲了安全起見,你應該從柔性成型類型轉換UID:

if(is_null($puzzle)) $puzzle = $this->puzzleRepository->findByUid((int)$this->settings['singlePuzzle']); 
+0

哇,這樣一個長文本爲「清除緩存」=) – Daniel 2014-11-04 19:47:32

+1

Yay它的工作原理!非常感謝,我懷疑是緩存問題,但我忘記了系統緩存。也感謝您的廣泛解釋,我真的很感激。 – 2014-11-05 08:53:06