如何从选择表单到extbase控制器设置选项值

时间:2017-10-19 10:00:34

标签: typo3 extbase

在流体中,我有选择形式

<f:form action="cityList" controller="City">
    <f:form.select
        class="js-select"
        property="city" 
        name="cityId" 
        options="{cityList}" 
        optionLabelField="title" 
        optionValueField="uid" />
    <f:form.submit value="Submit" />
</f:form>

在控制器中

/**
 * action city list
 *
 * 
 * @return void
 */
public function cityListAction()
{

    $cityList = $this->cityRepository->findAll();
    $this->view->assign('cityList', $cityList);      

    $cityData = $GLOBALS['TSFE']->fe_user->setKey('ses', 'citySessionData', $cityId);
    $cityData = $GLOBALS["TSFE"]->fe_user->getKey('ses', 'citySessionData');
    echo $cityData;
}

但我没有任何数据。如果我设置手动$ cityId,我有会话数据。如何将城市ID从表单设置为$ cityId

1 个答案:

答案 0 :(得分:0)

你没有绑定一个物体所以不能使用属性=&#34; city&#34;正确。您的listAction也不期望传递任何参数。

请相应更改ViewHelpers:

<f:form action="cityList" controller="City" objectName="filter" object="{filter}">
  <f:form.select
        class="js-select"
        property="cityId" 
        options="{cityList}" 
        optionLabelField="title" 
        optionValueField="uid" />
    <f:form.submit value="Submit" />
</f:form>

在HTML输出中,选择字段应该变为name="tx_yourext_yourplugin[filter][cityId]"之类的名称。这非常重要,否则表单值不会提交给您的操作。

然后改变你的行动:

/**
 * action city list
 * @param array $filter
 * @return void
 */
public function cityListAction($filter = [])
{

    $cityList = $this->cityRepository->findAll();
    $this->view->assign('cityList', $cityList);
    // Give $filter back to view so it will stay selected
    $this->view->assign('filter', $filter); 


    $cityData = $GLOBALS['TSFE']->fe_user->setKey('ses', 'citySessionData', $filter['cityId']);
    $cityData = $GLOBALS["TSFE"]->fe_user->getKey('ses', 'citySessionData');

    // You shall not use echo in TYPO3
    // echo $cityData; 
    \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($cityData);
}

我没有测试过这个!

更改操作后,您必须使用installtool清除缓存或重新安装扩展。