Могу ли я группировать несколько доменов в группе маршрутизации в Laravel?

предположим, у меня есть следующее:

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()
{
    ...
});

есть ли способ, чтобы несколько доменов разделяли группу маршрутизации? Что-то вроде:

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

8 ответов


Laravel, похоже, не поддерживает это.

Я не уверен, почему я не подумал об этом раньше, но я думаю, что одним из решений было бы просто объявить маршруты в отдельной функции, как передать его обеим группам маршрутов.

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);

Я не уверен, есть ли какое-либо значительное влияние на производительность этого решения.


фреймворк 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 () {
  ...
});


заинтересованы в этом также! Я пытаюсь зарегистрировать локальный маршрут субдомена разработки + производства для действия одного контроллера.

то есть

# 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');
});

пробовал:

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

но это не удалось.

не огромная проблема, как упоминал DesignerGuy, я могу просто передать функцию обоим маршрутам , но было бы просто более элегантно, если бы они могли быть сгруппированы :)


Регистрация laravel docs, если основным доменом является myapp, в производстве является myapp.com а в локальной среде это myapp.dev попробуйте использовать *

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

В настоящее время вы не можете. У меня была такая же "проблема"; мое исправление-проехать через ваши поддомены с foreach и зарегистрировать маршруты.


по данным документ laravel в laravel 5.4+ вы можете использовать этот способ:

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

смотрите по этой ссылке. http://laravel.com/docs/routing#sub-domain-routing

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

или используйте этот пакет.

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

это поможет вам установить, где на групповой маршрутизации, как это.

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

вы также можете передать доменное имя:

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 . '!';
    });
});

на всякий случай вам нужно знать, с каким доменным именем вызывается контроллер. Протестировал его с помощью Laravel 5.6.