filtrowanie listy rekordów

0

Hej,

mam listę dokumentów ( numer dokumentu, data wystawienia, etc... )
Nad tabelką, która trzyma te dane chciałbym umieścić filtr ( rok, miesiąc ), za który mają zostać wyświetlone:

  1. Wchodzę 1szy raz wyświetlam domyślnie dokumenty z obecnego roku i m-ca. zaznaczam opcje filtra odpowiednio.
  2. Ustawiam filtr - zapisz. Lista się filtruje i zapamiętuje co było we filtrze. zaznaczam opcje filtra odpowiednio na te z sesji

mam taki brzydki kod, działa, który chciałbym poprawić. Pomożecie to zrefaktoryzować?

public function index(Request $request)
    {
        $selectYear = AppTools::YearCollection();
        $selectMonth = AppTools::MonthCollection();

        if(empty(session('filterYear')) && empty(session('filterMonth')) && empty($request->filterYear))
        {
            $year = Carbon::parse(now())->year;
            $month = Carbon::parse(now())->month;
        }
        elseif( ! empty($request->filterYear && ! empty($request->filterMonth)))
        {
            session(['filterYear' => $request->filterYear]);
            session(['filterMonth' => $request->filterMonth]);

            $year = session('filterYear');
            $month = session('filterMonth');
        }
        else {
            $year = session('filterYear');
            $month = session('filterMonth');
        }

        $documents = $this->documentService->getDocumentsByYearAndMonth(100, $year, $month);

        return view('document.list', [
            'documents' => $documents,
            'year' => $year,
            'month' => $month,
            'selectYear' => $selectYear,
            'selectMonth' => $selectMonth
        ]);
    }
0

Ja bym się zastanowił nad trzymaniem takich rzeczy bezpośrednio w sesji. Lepiej takie filtry utrzymać po stronie klienta np. w localStorage, lub bezpośrednio w parametrach GET.

1 użytkowników online, w tym zalogowanych: 0, gości: 1