In vielen TYPO3 Backend Modulen bleiben benutzerspezifische Daten bzw. Modul-Einstellungen auch nach dem Wechsel in anderen Module erhalten. Beispiele sind z.B. das Listen-Modul (die dort vorgenommenen Einstellungen bzgl. eingeblendeter Felder oder die Sortierung nach bestimmten Spalten) oder auch das Function-Menu bei einem Backend Modul mit mehreren Funktionen (z.B. Web -> Info). In der Regel werden diese spezifischen Daten in die Backend-User Session gespeichert.

Das folgende Beispiel zeigt, wie ein Filter-Objekt zum Filtern der Listenansicht eines Backend-Modules dauerhaft über die Session verfügbar gemacht wird. Ein weiterer Vorteil dieser Maßnahme ist, dass die bei POST-Formularen gesetzten Parameter seitenübegreifend (bei Verwendung des f:widget.paginate ViewHelpers) verfügbar bleiben.

Extbase Controller

/**
 * action list
 *
 * @param \Vendor\Ext\Domain\Model\View\AffiliateFilter $affiliateFilter
 * @return void
 */
public function listAction(\Vendor\Ext\Domain\Model\View\AffiliateFilter $affiliateFilter = NULL) {  
	
	// Reset paginator if filter has changed
	if($affiliateFilter && $this->retrieveFilter() && $affiliateFilter != $this->retrieveFilter()) {
		if($this->request->hasArgument('@widget_0')) {
			$this->request->setArgument('@widget_0', array('currentPage' => 1));
		}
	}
	
	// Retrieve filter from session
	if(!$affiliateFilter) {
		$affiliateFilter = $this->retrieveFilter();
	}
	$this->storeFilter($affiliateFilter);
	
	$locations = $this->locationRepository->findByAffiliateFilter($affiliateFilter);
	$this->view->assign('affiliateFilter', $affiliateFilter);
	$this->view->assign('locations', $locations);        
	
}

/**
 * Stores the filter to session
 *
 * @param \Vendor\Ext\Domain\Model\View\AffiliateFilter $affiliateFilter
 * @return void
 */
protected static function storeFilter(\Vendor\Ext\Domain\Model\View\AffiliateFilter $affiliateFilter = NULL) {
	$GLOBALS['BE_USER']->uc['ext_ModuleSubmodule']['affiliateFilter'] = $affiliateFilter;
	$GLOBALS['BE_USER']->writeUC();
} 

/**
 * Retrieves the filter from session
 * 
 * @return \Vendor\Ext\Domain\Model\View\AffiliateFilter 
 */
protected function retrieveFilter() {
	$affiliateFilter = $GLOBALS['BE_USER']->uc['ext_ModuleSubmodule']['affiliateFilter'];
	if(!$affiliateFilter) {
		$affiliateFilter = $this->objectManager->get('\Vendor\Ext\Domain\Model\View\AffiliateFilter');
	}
	return $affiliateFilter;
}