Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Konfiguracje dla typów
Forum PHP.pl > Forum > PHP
markonix
Aplikacja po zalogowaniu ma różne zachowania dla różnych typów zalogowanego.
Niekoniecznie jest to standardowy typ konta, ale powiedzmy, że to jest zawód zalogowanego.
Nie są to standardowe role, uprawnienia.

Aplikacja jest wspólna dla każdego ale dla różnych zawodów różni się w paru miejscach np. są to pewne pola, pozycje w menu, które są różne dla różnych typów.
Tak więc mamy widok
  1. @if ($user->type == 'programmer' || $user->type == 'developer') <p>Komunikat tylko dla nich</p> @endif

Mamy też np. formularze gdzie w zależności od typu będą różne pola ale też różne nazwy i różne wartości domyślne.

I teraz ok, to działa ale takich prostych warunków będzie dużo w aplikacji i na pewno będą się zmieniać i dochodzić nowe typy.
Dodanie nowego typu będzie wymagało każdorazowo przeszukiwanie kontrolerów i widoków celem dopisania tego nowego typu do warunków if / in_array.

Myślę nad czymś takim, że pewne fragmenty aplikacji nazywam, a typy kont przenoszę do jakiegoś configu.

  1. @if (showThis('it_box_info', $user->type)) @endif


  1. Html::number('amount', old(showThis('default_value_in_some_input')))


A w configu:
  1. 'programmer' => ['it_box_info' => true, 'module_1' => false, 'default_value_in_some_input' => 10]
  2. 'programmer' => ['it_box_info' => true, 'module_1' => false, 'default_value_in_some_input' => 10]
  3. 'driver' => ['it_box_info' => false, 'module_1' => true, 'default_value_in_some_input' => 10]


Dodanie nowego typu jest wtedy bardzo proste, kopiujesz najbardziej podobny i tyle. Minus wiadomo, troszkę więcej pracy przy tworzeniu systemu oraz musi być dobrze ustalona konwencja nazewnictwa aby wiedzieć co tak naprawdę włączasz i wyłączasz. Można by się też pokusić o wartości domyślne gdy dany indeks w tablicy nie widnieje.

Co o tym sądzicie? To jakiś wzorzec jest czy po prostu zwykły config? Jakieś propozycje co do implementacji w Laravel (muszę mieć dostęp na pewno w widoku i kontrolerze)?
vokiel
Trudno wnioskować nie znając systemu w jakim pracujesz.
Niemniej, ja bym raczej szedł w stronę automatyzacji, np:

Komunikaty
  1. // Ustawienie komunikatu (np gdzieś w kontrolerze)
  2. $message = new Message($user->type);
  3.  
  4. // Potem zwykłe wyświetlanie bez ifów
  5. {{ message }}


Formularze - może widok zależny od typu?
  1. $view->render('super_form_'.$user->type.'_costam');


Przy takim rozwiązaniu dodanie nowego typu to tylko dodanie nowego formularza, nie trzeba przepisywać setek ifów.
markonix
Nie mam jeszcze systemu, na razie sobie składam klocki w świeżej aplikacji na L5.4 żeby potem było tylko z górki smile.gif

Osobne widoki to przesada, to będą subtelne różnice w wyświetleniu pewnych elementów.
Na razie zrobiłem coś takiego:

  1. @if (config('types.'. $active->type.'.min_time')
  2. // tu wyświetlenie diva z inputem wyświetlanego tylko dla typów które mają określony min_time
  3. @endif


W kontrolerach użycie takie:
  1. $defaultTime = config('types.'. $this->active->type.'.min_time');


Na razie się to sprawuje ale ubrałbym to w coś ładniejszego wink.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.