2017-10-19 86 views
0

在流體我有選擇的形式如何我可以選擇的形式設置選項值來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

回答

0

您沒有綁定到對象,因此無法正確使用propery property =「city」。你的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清除緩存或重新安裝擴展。

+0

感謝它的作品,會議正在進行中。但是,如果我想要在此控制器或其他控制器中瀏覽後獲取會話,例如$ cityData = $ GLOBALS [「TSFE」] - > fe_user-> getKey('ses','citySessionData');我的變量是空的。會話存儲在表fe_session_data –

+0

會話綁定到綁定到域的cookie。設置會話後,檢查您的Cookie的域名和生命週期。 –

相關問題