TYPO3:在新动作中保存外国 mm table
TYPO3: Saving foreign mm table in new action
我有两个实体:请求和事件。
因此,当在前端创建 Request
时,用户可能 select Events
(多个复选框)受他的请求影响。很明显是MM关系
我设法在 Request
的 FormFields.html
部分内显示了每个 Event
。使用以下代码:
RequestController.php(仅 new
操作)
/**
* action new
*
* @param \Vendor\ExtName\Domain\Model\Request $newRequest
* @ignorevalidation $newRequest
* @return void
*/
public function newAction(\Vendor\ExtName\Domain\Model\Request $newRequest = NULL) {
$events = $this->eventRepository->findAll();
$this->view->assign('events', $events);
$this->view->assign('newRequest', $newRequest);
}
...将 New.html
中的所有参数传递给 FormField.html
<f:render partial="Request/FormFields" arguments="{_all}"/>
并为每个 {events}
呈现一个复选框
<f:for each="{events}" as="event">
<f:form.checkbox value="{event.uid}" name="events" id="event{event.uid}"/>
<label for="event{event.uid}">{event.namede}</label><br/>
</f:for>
TCA:
'events' => array(
'exclude' => 1,
'label' => 'LLL:EXT:extname/Resources/Private/Language/locallang_db.xlf:tx_extname_domain_model_request.events',
'config' => array(
'type' => 'select',
'foreign_table' => 'tx_extname_domain_model_event',
'MM' => 'tx_extname_request_event_mm',
'size' => 10,
'autoSizeMax' => 30,
'maxitems' => 9999,
'multiple' => 0,
'wizards' => array(
'_PADDING' => 1,
'_VERTICAL' => 1,
'edit' => array(
'type' => 'popup',
'title' => 'Edit',
'script' => 'wizard_edit.php',
'icon' => 'edit2.gif',
'popup_onlyOpenIfSelected' => 1,
'JSopenParams' => 'height=350,width=580,status=0,menubar=0,scrollbars=1',
),
'add' => Array(
'type' => 'script',
'title' => 'Create new',
'icon' => 'add.gif',
'params' => array(
'table' => 'tx_extname_domain_model_event',
'pid' => '###CURRENT_PID###',
'setValue' => 'prepend'
),
'script' => 'wizard_add.php',
),
),
),
),
但我不知道如何将 selected 事件的值保存到数据库中。有人可以帮忙吗?
改为 name="events" 使用 属性="nameOfPropertyInYourModel"
<f:form.checkbox value="{event.uid}" name="events" id="event{event.uid}"/>
里杰这个:
<f:form.checkbox value="{event.uid}" property="events" id="event{event.uid}"/>
并且 Extbase 会自己找出连接。我建议对要存储在模型中的所有属性使用 属性 而不是名称。
此致,
西尼萨·米特罗维奇
我有两个实体:请求和事件。
因此,当在前端创建 Request
时,用户可能 select Events
(多个复选框)受他的请求影响。很明显是MM关系
我设法在 Request
的 FormFields.html
部分内显示了每个 Event
。使用以下代码:
RequestController.php(仅 new
操作)
/**
* action new
*
* @param \Vendor\ExtName\Domain\Model\Request $newRequest
* @ignorevalidation $newRequest
* @return void
*/
public function newAction(\Vendor\ExtName\Domain\Model\Request $newRequest = NULL) {
$events = $this->eventRepository->findAll();
$this->view->assign('events', $events);
$this->view->assign('newRequest', $newRequest);
}
...将 New.html
中的所有参数传递给 FormField.html
<f:render partial="Request/FormFields" arguments="{_all}"/>
并为每个 {events}
<f:for each="{events}" as="event">
<f:form.checkbox value="{event.uid}" name="events" id="event{event.uid}"/>
<label for="event{event.uid}">{event.namede}</label><br/>
</f:for>
TCA:
'events' => array(
'exclude' => 1,
'label' => 'LLL:EXT:extname/Resources/Private/Language/locallang_db.xlf:tx_extname_domain_model_request.events',
'config' => array(
'type' => 'select',
'foreign_table' => 'tx_extname_domain_model_event',
'MM' => 'tx_extname_request_event_mm',
'size' => 10,
'autoSizeMax' => 30,
'maxitems' => 9999,
'multiple' => 0,
'wizards' => array(
'_PADDING' => 1,
'_VERTICAL' => 1,
'edit' => array(
'type' => 'popup',
'title' => 'Edit',
'script' => 'wizard_edit.php',
'icon' => 'edit2.gif',
'popup_onlyOpenIfSelected' => 1,
'JSopenParams' => 'height=350,width=580,status=0,menubar=0,scrollbars=1',
),
'add' => Array(
'type' => 'script',
'title' => 'Create new',
'icon' => 'add.gif',
'params' => array(
'table' => 'tx_extname_domain_model_event',
'pid' => '###CURRENT_PID###',
'setValue' => 'prepend'
),
'script' => 'wizard_add.php',
),
),
),
),
但我不知道如何将 selected 事件的值保存到数据库中。有人可以帮忙吗?
改为 name="events" 使用 属性="nameOfPropertyInYourModel"
<f:form.checkbox value="{event.uid}" name="events" id="event{event.uid}"/>
里杰这个:
<f:form.checkbox value="{event.uid}" property="events" id="event{event.uid}"/>
并且 Extbase 会自己找出连接。我建议对要存储在模型中的所有属性使用 属性 而不是名称。
此致, 西尼萨·米特罗维奇