Op dit moment heb ik onderstaande situatie:
routes.php
Een route group waarin 'account' opgenomen is, zie dat als een organisatie. Daarin zit een route group voor 'dashboard', waarin het account en alles wat bij het account hoort beheert kan worden.
---
UserController.php
Allereerst heb ik een constructor waarin de account opgehaald word en toegevoegd word aan alle views binnen de controller. Vervolgens zijn er dan verschillende methods voor het beheren van de gebruikers.
Problemen
Bovenstaande is maar een voorbeeld; er zijn meer route groups en meer controllers. Hiermee kom ik onderstaande problemen tegen.
1. Is er een manier om iets met subdomeinen te doen zonder env('APP_DOMAIN') te gebruiken? Nu zal het domein niet elke dag veranderen natuurlijk, maar ik kan tot zover geen andere oplossing vinden. Het er hard in zetten kan sowieso niet, meerdere omgevingen (lokaal/staging/productie) gaat dan niet werken.
2. De constructor komt vaker voor, in Controller.php is geen optie, gezien het niet overal het 'account' subdomein gebruikt word. Volgens mij kan ik hier een extra controller voor maken die ik extend, toch?
3. Nu moet ik in meerdere methods $account_slug als argument toevoegen. Ik kon hierover alleen dit vinden, maar dat is al oud en wellicht helemaal niet relevant meer. Zijn hier inmiddels oplossingen voor in Laravel 5.1?
--- Edit ---
Na wat proberen om te zien wat een mooie oplossing is, is het een 'parent' controller geworden.
DashboardController.php
---
Dashboard/UserController.php
Deze DashboardController gebruik in alle controllers voor het dashboard. Mocht ik de constructor in (bijv.) de UserController nodig hebben, dan kan ik een parent::__construct($request); gebruiken.
Lijkt me hiervoor een nette oplossingen, maar suggesties zijn natuurlijk altijd welkom!
routes.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| // Account group Route::group([ 'domain' => '{account}.'.env('APP_DOMAIN') ], function () { // Dashboard group Route::group([ 'prefix' => 'dashboard', 'namespace' => 'Dashboard', ], function () { Route::resource('users', 'UserController'); }); // Algemene routes binnen het account Route::get('/', 'HomeController@index'); }); |
Een route group waarin 'account' opgenomen is, zie dat als een organisatie. Daarin zit een route group voor 'dashboard', waarin het account en alles wat bij het account hoort beheert kan worden.
---
UserController.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| class UserController extends Controller { protected $account; public function __construct (Request $request) { $this->account = Account::where('slug', $request->account)->firstOrFail(); view()->share('account', $this->account); } public function edit($account_slug, $id) { $user = User::findOrFail($id); return view('dashboard.users.edit')->with(['user' => $user]); } } |
Allereerst heb ik een constructor waarin de account opgehaald word en toegevoegd word aan alle views binnen de controller. Vervolgens zijn er dan verschillende methods voor het beheren van de gebruikers.
Problemen
Bovenstaande is maar een voorbeeld; er zijn meer route groups en meer controllers. Hiermee kom ik onderstaande problemen tegen.
1. Is er een manier om iets met subdomeinen te doen zonder env('APP_DOMAIN') te gebruiken? Nu zal het domein niet elke dag veranderen natuurlijk, maar ik kan tot zover geen andere oplossing vinden. Het er hard in zetten kan sowieso niet, meerdere omgevingen (lokaal/staging/productie) gaat dan niet werken.
2. De constructor komt vaker voor, in Controller.php is geen optie, gezien het niet overal het 'account' subdomein gebruikt word. Volgens mij kan ik hier een extra controller voor maken die ik extend, toch?
3. Nu moet ik in meerdere methods $account_slug als argument toevoegen. Ik kon hierover alleen dit vinden, maar dat is al oud en wellicht helemaal niet relevant meer. Zijn hier inmiddels oplossingen voor in Laravel 5.1?
--- Edit ---
Na wat proberen om te zien wat een mooie oplossing is, is het een 'parent' controller geworden.
DashboardController.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
| class DashboardController extends Controller { protected $account; public function __construct (Request $request) { $this->account = Account::where('slug', $request->account)->firstOrFail(); view()->share('account', $this->account); } } |
---
Dashboard/UserController.php
PHP:
1
2
3
4
5
6
7
8
9
| class UserController extends DashboardController { public function edit($account_slug, $id) { $user = User::findOrFail($id); return view('dashboard.users.edit')->with(['user' => $user]); } } |
Deze DashboardController gebruik in alle controllers voor het dashboard. Mocht ik de constructor in (bijv.) de UserController nodig hebben, dan kan ik een parent::__construct($request); gebruiken.
Lijkt me hiervoor een nette oplossingen, maar suggesties zijn natuurlijk altijd welkom!
[ Voor 18% gewijzigd door TheNephilim op 26-08-2015 15:19 ]