Если в вашем классе поиска требуется ваш фильтр региона, используйте Inpendency Injection, чтобы передать его в него.Ваш фильтр региона должен быть классом модели домена.Этот фильтр региона должен не знать, где вы храните свои данные между запросами.Просто убедитесь, что у Region Filter есть он, когда он ему нужен.
Как класс модели домена, он не принадлежит контроллеру, а модели.Обратите внимание, что Модель - это не только база данных, но и все, кроме пользовательского интерфейса.Контроллер является частью уровня пользовательского интерфейса.Его единственная цель - делегировать текущий Запрос соответствующим моделям.
Другими словами, вы должны делать что-то вроде этого:
public function searchAction()
{
$customerSearch = new CustomerSearch;
$customerSearch->setFilter(new RegionFilter($_SESSION));
$results = $customerSearch->fetchResults();
// do something with $results on User Interface
}
Обратите внимание, что я не согласен с ответомв другом месте на этой странице данные или состояние сеанса принадлежат контроллеру.Это не так.Данные сеанса - это просто сохраненные данные.Как и любые другие постоянные данные, они относятся к постоянному слою (который также является частью модели).Забудьте, что это данные сеанса.Это данные фильтра регионов.
Имеет смысл наложить API на $_SESSION
(или любой суперглобальный), чтобы предотвратить связь с конкретной средой.Но класс RegionFilterStorage_Session
все равно будет классом модели.