Chcialbym sie poradzic was apropo pewnych kilku rzeczy dotyczacych mojej klasy ktorej napisalem.
Chodzi o filtrowanie rekordow na stronie.
Zaczne od struktury:
Stworzylem 3 klasy:
Factory, BaseHandler, Button
Factory jest wstrzykiwana do metody controllera przez LOC, takze jest ona zainicjowana juz na starcie, pozniej kod wyglada tak:
$filters->listen('cat', 'Categories', [$businessTypes, $businesses]) ->listen('name', 'Search', [$businesses]) ->handle();
listen, chodzi o sluchanie parametru, takze pierwszy argument to parametr get do sluchania, drugi to nazwa klasy handlera, bez namespace, automatycznie dodawany przez Factory, natomiast tablica to argumenty przekazane do stworzonego handlera.
Oczywiscie handler musi byc rozszerzeniem klasy BaseHandler, gdzie cala logika jest tworzona.
Dziecko Handlera musi miec 3 metody: boot, filter i lang, gdzie boot to tam gdzie wstrzykuja sie argumenty z tablicy i zwracana jest tablica z mozliwymi filtrami. Filter to operacje na argumentach podczas spelnienia warunku, kod wyglada np tak:
switch($this->value()) { case 'name': $this->builder->orderBy($this->column); break; case 'name-inv': $this->builder->orderBy($this->column, 'DESC'); break; default: $this->builder->orderBy('created_at', 'DESC'); }
metoda lang zwraca string z sciezka do tablicy z ew. kluczami do tlumaczenia.
Button to tak na prawde glupia struktura z metodami, ktora dostaje wiekszosc informacji w konstruktorze, a tworzony jest w kazdym handlerze po wykonaniu handle() na fabryce.
pozniej ladujemy z takim kodem w blade:
foreach($filters->sort->buttons as $button) { $button->href, $button->isActive()}
Teraz moje pytanie, jak moge zabezpieczyc zeby handler zawsze mial te metody, problem w tym ze sa do niego wstrzykiwane argumenty i kiedy uzywam interfejsu dostaje blad ze metoda jest niezgodna z pierwowzorem.
Dwa, czy to ogolnie dobrze jest to przemyslane, nie jestem expertem i chcialbym sensowne odpowiedzi co wymagałoby zmiany lub jak powinienem do tego podejsc.
kod mi sie podoba bo w handlerze jest logika filtrowania, a w kontrolerze mam tylko te komendy listen, oraz moge podpiac jeden ten sam filtr np do Kategorii pod rozne parametry z roznymi argumentami (np rozne modele bo wymagana tam jest akurat instancja buildera)
Edit: O i zapomnialem o najwazniejszym, base handler posiada prywatna statyczna property, do trzymania wszystkich sluchanych parametrow, stwierdzilem ze to lepszy pomysl niz wstrzykiwanie wartosci przy tworzeniu handlera, chcialbym wiedziec czy to jest wlasnie odpowiednie wykorzystanie statica, bo juz sam nie wiem, oczywiscie akcesory mam niestatycznie w handlerze.
Z gory dzieki za pomoc
Pozdrawiam