web-dev-qa-db-fra.com

Puis-je grouper plusieurs domaines dans un groupe de routage dans Laravel?

Disons que j'ai les éléments suivants:

Route::group(array('domain' => array('admin.example.com')), function()
{
    ...
});

Route::group(array('domain' => array('app.example.com')), function()
{
    ...
});

Route::group(array('domain' => array('dev.app.example.com')), function()
{
    ...
});

Existe-t-il un moyen de faire en sorte que plusieurs domaines partagent un groupe de routage? Quelque chose comme:

Route::group(array('domain' => array('dev.app.example.com','app.example.com')), function()
{
    ...
});
23
DesignerGuy

Laravel ne semble pas supporter cela.

Je ne sais pas pourquoi je n'y ai pas pensé plus tôt, mais je suppose qu'une solution consisterait simplement à déclarer les itinéraires dans une fonction distincte en les transmettant aux deux groupes.

Route::group(array('domain' => 'admin.example.com'), function()
{
    ...
});

$appRoutes = function() {
    Route::get('/',function(){
        ...
    }); 
};

Route::group(array('domain' => 'app.example.com'), $appRoutes);
Route::group(array('domain' => 'dev.app.example.com'), $appRoutes);

Je ne sais pas si cette solution aura un impact significatif sur les performances.

45
DesignerGuy

Laravel 5.1

  

Route::pattern('subdomain', '(dev.app|app)');
Route::group(['domain' => '{subdomain}.example.com'], function () {
  ...
});
  

Route::pattern('subdomain', '(dev.app|app)');
Route::pattern('domain', '(example.com|example.dev)');
Route::group(['domain' => '{subdomain}.{domain}'], function () {
  ...
});
11
Johnathan Douglas

Intéressé par cela aussi! J'essaie d'enregistrer une route de développement local + sous-domaine de production, pour l'action d'un contrôleur.

c'est à dire.

# Local Dev
Route::group(array('domain' => "{subdomain}.app.dev"), function() {
    Route::get('/{id}', 'SomeController@getShow');
});

# Production Server
Route::group(array('domain' => "{subdomain}.app.com"), function() {
    Route::get('/{id}', 'SomeController@getShow');
});

J'ai essayé:

# Failed
Route::group(array('domain' => "{account}.app.{top_level_domain}"), function() {
    Route::get('/{id}', 'SomeController@getShow');
});

Mais ça a échoué.

Ce n'est pas un gros problème, comme DesignerGuy l'a mentionné, je peux simplement transmettre une fonction aux deux itinéraires - mais il serait simplement plus élégant de les regrouper :)

4
Dylan Baskind

check in laravel docs , si votre domaine principal est myapp, en production, myapp.com et en environnement local, myapp.dev, utilisez un *.

Route::group(array('domain' => '{subdomain}.myapp.*'), 
function()
{
    ...
});
3
Bradley

Vous pouvez également transmettre le nom de domaine:

Route::pattern('domain', '(domain1.develop|domain2.develop|domain.com)');
Route::group(['domain' => '{domain}'], function() {
    Route::get('/', function($domain) {
        return 'This is the page for ' . $domain . '!';
    });
});

Juste au cas où vous auriez besoin de savoir avec quel nom de domaine le contrôleur s'appelle . Testez-le avec Laravel 5.6.

1
Marty

Actuellement, vous ne pouvez pas. J'ai eu le même problème'; Ma solution est de parcourir vos sous-domaines avec un foreach et d'enregistrer les itinéraires.

1
Rob Gordijn

selon document laravel dans laravel 5.4+, vous pouvez utiliser cette méthode:

Route::domain('{account}.myapp.com')->group(function () {
    Route::get('user/{id}', function ($account, $id) {
        //
    });
});
1
Winner1

voir ce lien. http://laravel.com/docs/routing#sub-domain-routing

Route::group(array('domain' => '{subdomain}.example.com'), function()
{
    ...
});

ou Utilisez ce paquet.

https://github.com/jasonlewis/enhanced-router

Cela vous aidera à définir où sur un routage de groupe comme celui-ci.

Route::group(array('domain' => '{maindomain}'), function()
{
    ...
})->where('maindomain', '.+\.example\.com$');
0
EThaizone Jo