2017-09-10 8 views
1

Je construis une nouvelle application dans Laravel 5.5 qui dépendra fortement de ses noms de sous-domaines.Comment faire pour passer efficacement le nom de sous-domaine dans les contrôleurs et les vues dans Laravel

J'ai réussi à définir un groupe de routage pour le routage de sous-domaine, mais il faudra éventuellement que la variable de nom de sous-domaine soit disponible pour chaque contrôleur et pour chaque vue.

J'ai déjà un View Composer personnalisé, où je transmets des variables de session à chaque vue. Comment puis-je rendre le nom de sous-domaine disponible pour View Composer? Je ne pense pas pouvoir accéder à un sous-domaine via l'objet Request.

Aussi, est-il possible de passer le nom de sous-domaine à chaque contrôleur et ses méthodes sans avoir besoin de spécifier le paramètre dans chaque méthode?

Actuellement, mon routage ressemble:

Route::domain('{sub}.something.com')->group(function() { 
Route::prefix('admin')->group(function ($sub) { 
    Route::get('/', '[email protected]')->name('admin.route1'); 
    Route::get('/route2', '[email protected]')->name('admin.route2'); 
    Route::post('/', '[email protected]')->name('admin.route3'); 
/snip 

Mais cette façon, je dois définir toutes les méthodes de commande comme

public function method($sub){} 

Pire encore, appeler toutes les routes du nom et de passer le paramètre $ sub à tous les voir comme ceci:

public function method($sub){ 
    if(Sentinel::check()){ 
     return redirect()->route('admin.route1',$sub); 
    } else { 
     return view('admin.route2')->with('sub',$sub); 
    } 
} 

et en vue:

{{ route('admin.route1',$sub) }} 

Je comprends si je vraiment besoin de passer la variable $ sub aux vues et aux contrôleurs, mais je préfère vraiment automatiser en utilisant View Composer:

public function __construct() 
{ 
    $this->user = session('user'); 
    $this->userdata = session('userdata'); 
    $this->permissions = session('permissions'); 
} 


public function compose(View $view) 
{ 
    $view->with(['user' => $this->user, 'userdata' => $this->userdata, 'permissions' => $this->permissions]); 
} 

Alors, comment Je reçois $ sub dans mon View Composer pour pouvoir le définir comme:

$this->subdomain = $sub_from_somewhere 

Ou est-ce que je fais cela faux? Je ne pouvais pas trouver un moyen plus efficace de construire l'application avec la logique de sous-domaine en elle.

Merci beaucoup.

Répondre

0

Vous pouvez utiliser la fonction d'assistance request() qui vous donne accès à tous les paramètres de requête en cours. Dans votre cas, vous pouvez accéder à la valeur « sous » dans votre lame comme ça:

{{request("sub")}} 
0

C'est une solution simple:

Route::current()->parameter('sub') 

Vous pouvez l'utiliser dans le contrôleur ou passer aux vues.