2017-08-09 132 views
0

我已經按照我的模型關係:請求1:N館(一到多)我可以在一個Fluid表單中創建多個項目嗎?

在請求模型類我有

/** 
* hall 
* 
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Vendor\Ext\Domain\Model\Hall> 
* @cascade remove 
*/ 
protected $hall = null; 

在館模型類我有

/** 
* num 
* 
* @var string 
* @validate NotEmpty 
*/ 
protected $num = ''; 

我可以在一個Fluid表單中設置多個項目嗎?像

<f:form avction="create" name="hall" object="{hall}" controller="Hall"> 
<f:form.textfield name="hall[num][]" class="form-control" /> 
<f:form.textfield name="hall[num][]" class="form-control" /> 
<f:form.submit value="Create" /> 
</f:form> 
+0

是的,它是可能的,但你需要使用Propertymapper允許在initializeAction(S)的子對象的創建。下面是關於它的相當好德的教程(希望你能爲你翻譯吧)https://www.typo3lexikon.de/typo3-tutorials/core/systemextensions/extbase/property-mapper.html 到底的創作的子對象被解釋得非常好。 –

回答

0

我個人TYPO3的自動映射奮鬥,所以我會做到以下幾點:

添加以下funcs中到模型

public function addHall(Hall $hall){ 
$this->hall->atach($hall) 
} 

pubflic function removeHall(Hall $hall){ 
$this->hall->detach($hall) 
} 

注:Kepp記住,你必須聲明$大廳人對象存儲

現在你可以創建你的控制器中的新館的對象,堅持新館,與addHall法將其添加到侑所需的型號和堅持。提示:fpr持續存在不錯的小函數;類似於PersistanceManager :: persistAll()或s.th.這樣

+0

非常感謝!一切正常 –

1

你是接近的解決方案,name你寫然而缺少適當的插件命名空間的領域。有這個一個簡單的解決方案:

<f:form action="create" name="request" object="{request}" controller="Request"> 
    <f:form.textfield property="hall.0.num" class="form-control"/> 
    <f:form.textfield property="hall.1.num" class="form-control"/> 
    <f:form.submit value="Create"/> 
</f:form> 

你創建你的根實體(要求這裏)的形式和通過適當的表單字段的所有關係是至關重要的。使用property確保所有字段的專有名稱(包括插件名稱空間),在這種情況下例如name="tx_myext_myplugin[request][hall][0][num]"

正如你可能已經注意到,你可以爲你只要使用一個數字索引的每個對象所需的添加儘可能多的關係對象。對於很多領域,您可以使用視圖幫助程序f:for

相關問題