Jestem w trakcie tworzenia nowego serwisu przy użyciu frameworka Laravel. Nadal się go uczę i nie do końca wiem, gdzie pewne elementy powinny być umieszczone.
W tej chwili mam kontroler:
namespace App\Http\Controllers; class ArticlesListController extends Controller { public function getAlphabetBar($letter) { ... return $alphabet; } public function show($letter) { $articles = \App\Article:: ->where('active', 1) ->where('name', 'LIKE', $letter.'%') ->orderBy('name'); return view('articles.index', ['articles' => $articles, 'alphabet' => this->getAlphabetBar($letter) ]); } }
Nie podobają mi się w nim dwie pozycje. Po pierwsze funkcja do generowania linków alfabetu. Po kliknięciu w literę pokażą się artykuły zaczynające się od niej. Alfabet nie może być "na sztywno" zamieszczony w widoku, gdyż jest on generowany w zależności od dostępnych artykułów oraz wersji językowej. Gdzie w laravel jest miejsce na tego typu funkcje? może kompozytor widoku?
Druga sprawa to pobieranie danych do zbioru $articles. Czy powinno być to wykonywane w konstruktorze? Teoretycznie można by stworzyć klasę ArticlesList mniej więcej:
class ArticlesList { public function getAlphabetBar($letter) { ... return $alphabet; } public function getArticlesByLetter($letter) { return \App\Article:: ->where('active', 1) ->where('name', 'LIKE', $letter.'%') ->orderBy('name'); } } //potem... class ArticlesListController extends Controller { public function show($letter) { $articlesList = new ArticlesList(); return view('articles.index', ['articles' => $articlesList->getArticlesByLetter($letter), 'alphabet' => $articlesList->getAlphabetBar($letter) ]); } }
Niby problem rozwiązany, ale jak ta klasa ma się do frameworka? Czy może ma ona tam swoje miejsce jako np. kompozytor widoku, usługa,repozytorium itp..?