2017-07-31 1 views
0

J'ai une application construite en utilisant Laravel 5.2. L'application a 3-4 différents types de cas d'utilisation totalement différents, (mini applications, si vous le pouvez). Donc, j'héberge le site principal et les itinéraires pour les administrateurs sur le domaine principal. Pour chacune des mini-applications, j'ai créé un sous-domaine et toutes les mini-routes d'application ont leurs propres sous-domaines. La façon dont je l'ai sous-domaines cartographiés sont:Laravel 5.2 routage de sous-domaine en utilisant la fonction de routeur

$sub = str_replace('http://', '', strstr(Request::fullUrl(), '.', true)); 

if ($sub == env('APP_SUB1')) { 

//Subdomain1 routes 

} else if ($sub == env('APP_SUB2')) { 

//Subdomain2 routes 

} 

Maintenant, je veux être en mesure d'utiliser le sous-domaine Laravel routes sous-domaine en construction, et j'ai essayé:

Route::group(['domain' => env('APP_DOMAIN')], function() { 
    Route::get('/', function() { 
     echo 'Main Site'; 
     die; 
    }); 
}); 

Route::group(['domain' => '{sub1}.'.env('APP_DOMAIN')], function() { 
    Route::get('/', function ($sub1) { 
     echo 'Sub1 Site'; 
     die; 
    }); 
}); 

Route::group(['domain' => '{sub2}.'.env('APP_DOMAIN')], function() { 
    Route::get('/', function ($sub2) { 
     echo 'Sub2'; 
     die; 
    }); 
}); 

MISE À JOUR

Un peu plus d'informations sur le comportement:

  1. Lorsqu'un utilisateur visite s www.mondomaine.com/login, la page de connexion pour les administrateurs doit être affichée.
  2. Lorsqu'un utilisateur visite sub1.mydomain.com/login, , la page de connexion pour les utilisateurs de l'application sub1 doit être affichée.
  3. Lorsqu'un utilisateur visite sub2.mydomain.com/login, la page de connexion pour les utilisateurs d'application sub2 doivent figurer, et ainsi de suite ...

Ma méthode plus tôt par l'analyse de l'URL complète de la demande puis en routant les utilisateurs en conséquence, fonctionne. Ce que je veux, c'est un moyen plus robuste et élégant (donc essayé en utilisant le routage de domaine Laravel). Mais avec l'exemple de code que j'ai montré ci-dessus, avec les sous-domaines, je vois toujours 'Sub1 Site', quel que soit le sous-domaine passé.

+0

Vous avez seulement besoin de le passer si vous avez besoin de l'utiliser dans le rappel que je pense. – apokryfos

+0

J'ai essayé sans passer et dans ce cas, toutes les URL imprimées seulement "sub1" – gentrobot

+0

Pouvez-vous mettre à jour votre question avec ce qui ne fonctionne pas et quel devrait être le comportement prévu? – apokryfos

Répondre

1

Je pense qu'il y a un peu de malentendu sur la façon dont cela fonctionne. Si vous passez le sous-domaine {} alors vous êtes essentiellement dire qu'il est un sous-domaine variables, ce qui signifie '{sub1}.'.env('APP_DOMAIN') et '{sub2}.'.env('APP_DOMAIN') sont essentiellement la même chose, mais avec un autre nom de variable pour le sous-domaine:

Exemple:

Route::group(['domain' => '{sub1}.'.env('APP_DOMAIN')], function() { 
    Route::get('/', function ($sub1) { 
     echo $sub1." Site"; 
     //Prints sub1 Site when visiting sub1 and sub2 site when visiting sub2 
     die; 
    }); 
}]); 

Qu'est-ce que (je suppose) que vous voulez est:

Route::group(['domain' => 'sub1.'.env('APP_DOMAIN')], function() { 
    Route::get('/', function() { 
     echo "Sub1 Site"; 
     die; 
    }); 
}]); 
Route::group(['domain' => 'sub2.'.env('APP_DOMAIN')], function() { 
    Route::get('/', function() { 
     echo "Sub2 Site"; 
     die; 
    }); 
}]); 

Notez la suppression de {} cela signifie que le premier groupe correspondra au littéral sub1. au lieu de *.<rest of domain>

+0

Merci de m'avoir orienté dans la bonne direction. C'était tellement stupide de ma part. Laissez-moi essayer la bonne façon de le faire. – gentrobot

+0

J'ai maintenant ajouté toutes les routes pour le site principal, à l'extérieur et tous les itinéraires de sous-domaines sont regroupés avec un sous-domaine respectif, comme vous l'avez montré dans l'exemple de code ci-dessus. Merci beaucoup pour votre aide. – gentrobot

3

J'ai essayé sans passer et dans ce cas, toutes les URL imprimées uniquement « sub1 »

Bien sûr, parce que le premier groupe d'itinéraire attire toutes les demandes. Vous pouvez supprimer complètement le deuxième groupe de routes et ajouter une logique (que vous ne devriez pas faire dans les routes config) pour gérer les sous-domaines.

{sub1} peut être quelque chose de vraiment, donc quand vous entrez, par exemple, "anythingreally.mydomain.com/login" il sera toujours attrapé, et passera sous-domaine à la variable $ sub1.