Obtenir le sous-domaine dans un sous-domaine de l'itinéraire (Laravel)
Je suis en train de construire une application où un sous-domaine qui pointe vers un utilisateur. Comment puis-je obtenir le sous-domaine-partie de l'adresse, ailleurs que dans un itinéraire?
Route::group(array('domain' => '{subdomain}.project.dev'), function() {
Route::get('foo', function($subdomain) {
//Here I can access $subdomain
});
//How can I get $subdomain here?
});
J'ai construit un malpropre de travail autour, cependant:
Route::bind('subdomain', function($subdomain) {
//Use IoC to store the variable for use anywhere
App::bindIf('subdomain', function($app) use($subdomain) {
return $subdomain;
});
//We are technically replacing the subdomain-variable
//However, we don't need to change it
return $subdomain;
});
La raison pour laquelle je veux utiliser la variable en dehors de l'itinéraire pour établir une base de données-connexion en fonction de cette variable.
- Vous pouvez vérifier la Demande::serveur('PATH_INFO') et de l'extrait de la chaîne avant le premier point.
- Vrai, même si elle semble sale, alors Laravel de type de a que les fonctionnalités out-of-the-box. Je voudrais trouver une façon plus propre.
- array_shift(explode(".",$_SERVER['HTTP_HOST'])) Nettoyeur de qui?
- Nice et la solution la plus simple.
array_shift
accepte uniquement une variable si, comme il est passé par référence, mais j'ai utilisé ceci à la place:list($subdomain) = explode('.', Request::server('HTTP_HOST'))
. Un "Laravel maternelle" la solution serait encore bien. - Je ne suis pas dans une position pour essayer cela, mais comment passer
$subdomain
à la route groupe de paramètres de la fonction?Route::group(array('domain' => '{subdomain}.project.dev'), function($subdomain) {}
et ensuite utiliseruse
pourRoute::get()
- L'Itinéraire::groupe la fermeture accepte un seul argument, qui est rempli avec un objet Routeur. Vous ne pouvez pas commencer à mettre les paramètres de la route comme arguments pour les fermetures jusqu'à l'Itinéraire::get() de fermeture/méthode de contrôleur.
Vous devez vous connecter pour publier un commentaire.
Peu de temps après cette question a été posée, Laravel mis en œuvre une nouvelle méthode pour obtenir le sous-domaine à l'intérieur du code de routage. Il peut être utilisé comme ceci:
Voir "Accéder À Un Paramètre De Route De La Valeur" dans les docs.
$subdomain
est injecté dans leRoute
rappel, il n'est pas à l'intérieur de lagroup
fermeture parce que leRequest
n'a pas encore été analysés.Je ne vois pas pourquoi auriez-vous besoin de l'avoir disponible à l'intérieur du groupe la fermeture MAIS à l'extérieur de la réelle
Route
de rappel.Si ce que vous voulez faire est de l'avoir disponible partout une FOIS le
Request
a été analysée, vous pouvez configurer un filtre après pour stocker les$subdomain
valeur:Mise à jour: l'application d'un filtre de groupe de la configuration d'une connexion de base de données.
Route::input('subdomain')
?Ci-dessus ne fonctionne pas dans Laravel 5.4 ou 5.6. Merci de tester celui-ci:
dans l'itinéraire d'appel
$route = Route::getCurrentRoute();
et maintenant, vous devriez avoir accès à tout l'itinéraire. I. e.
group
-fonction renvoieNULL
.