在流体中,我有选择形式
<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
答案 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清除缓存或重新安装扩展。