2013-07-19 24 views
1

我創建了一個名爲Play的自定義模型,它的屬性TitleBody與獲取者和設置者。FLUID中的窗體對象中的錯誤TYPO3

在我的控制器Master之一,我有new and create actions

public function newAction(\TYPO3\Playground\Domain\Model\Play $newPlay = NULL) { 
    $this->view->assign('newPlay', $newPlay); 
} 

我的視圖看起來是這樣的:

<table> 
     <f:form action="create" name="newPlay" object="{newPlay}"> 
      <th>Title:</th> 
      <td> 
       <f:form.textfield property="title"/> 
      </td> 
      <th>Body:</th> 
      <td> 
       <f:form.textarea property="body"/> 
      </td> 
      </th> 
      <tr> 
       <td> 
        <f:form.submit value="Create"/> 
       </td> 
      </tr> 
     </f:form> 
    </table> 

但在控制我創建的功能我得到這個錯誤必需的參數「 newPlay「未設置。

public function createAction(\TYPO3\Playground\Domain\Model\Play $newPlay) { 
    echo $newPlay->getBody(); 
    echo $newPlay->getTitle(); 
} 

我在這裏錯過了什麼嗎?

更新

後匹配名稱的對象和刪除的屬性字段括號,這是錯誤:

,而在屬性路徑「」屬性映射異常:無轉換器找到可用於將數組轉換爲「TYPO3 \ Playground \ Domain \ Model \ Play」。

我對IT解決方案

我非常肯定有一個整潔的方式比這

public function createAction() { 

    $newPlayArray=$this->request->getArgument('newPlay'); 
    $newPlay = json_decode(json_encode($newPlayArray), FALSE); 
    echo $newPlay->title; 

} 

回答

3

形式的名稱必須與目標匹配

<f:form action="create" name="newPlay" object="{newPlay}"> 

它用於設置字段的名稱。

更新

你有沒有設置PHPDoc的意見嗎?這些對於Extbase開發是必需的和非常重要的。 示例:

/** 
* @param \TYPO3\Playground\Domain\Model\Play $newPlay 
* @dontvalidate $newPlay 
*/ 
public function newAction(\TYPO3\Playground\Domain\Model\Play $newPlay = NULL) { 
    $this->view->assign('newPlay', $newPlay); 
} 
+0

它仍然顯示我同樣的錯誤!我也清除了緩存。 – dora

+0

您還需要刪除屬性名稱{{}}和{{body}'中的括號,否則該屬性將填充變量值。 – Merec

+0

我是否需要將傳遞的對象轉換成某個地方?請檢查我的更新 – dora

0

嘗試始終將對象傳遞給視圖。在你的情況,你最有可能通NULL:

/** 
* @param \TYPO3\Playground\Domain\Model\Play $newPlay 
* @dontvalidate $newPlay 
* @return void 
*/ 
public function newAction(\TYPO3\Playground\Domain\Model\Play $newPlay = NULL) { 
    if (is_null($newPlay)) { 
     $newPlay = $this->objectManager->create('TYPO3\Playground\Domain\Model\Play'); 
    } 
    $this->view->assign('newPlay', $newPlay); 
} 

留下您的形式,因爲它是和只取對象的createAction:

/** 
* @param \TYPO3\Playground\Domain\Model\Play $newPlay 
* @return void 
*/ 
public function createAction(\TYPO3\Playground\Domain\Model\Play $newPlay) { 
    $this->playRepository->add($newPlay); 
    $this->redirect('anyAction'); 
} 
相關問題