Php Laravel:为每个请求主机选择不同的控制器

Php Laravel:为每个请求主机选择不同的控制器,php,laravel-5,routing,Php,Laravel 5,Routing,我有一个需要为多个域提供服务的Laravel应用程序,例如,firstdomain.com、seconddomain.com、thirddomain.com。无论域名是什么,逻辑层都保持不变,但表示方式会发生变化。因此,我想为每个域调用一组不同的控制器。我该怎么做 我已经创建了一个中间件,它获取$\u SERVER['HTTP\u HOST']的值,并将其设置为请求对象的一个属性,但我不确定从哪里开始。理想情况下,我会将其设置为一组控制器的名称空间前缀。您可以将控制器分组在其域实现不同的组中。您

我有一个需要为多个域提供服务的Laravel应用程序,例如,firstdomain.com、seconddomain.com、thirddomain.com。无论域名是什么,逻辑层都保持不变,但表示方式会发生变化。因此,我想为每个域调用一组不同的控制器。我该怎么做


我已经创建了一个中间件,它获取
$\u SERVER['HTTP\u HOST']
的值,并将其设置为请求对象的一个属性,但我不确定从哪里开始。理想情况下,我会将其设置为一组控制器的名称空间前缀。

您可以将控制器分组在其域实现不同的组中。您还可以共享公共控制器:

// Common route
Route::get('about', 'ContentController@about');

// Diverge by domain
Route::group(['domain' => 'foodomain.com'], function () {
    Route::resource('task', 'FooTaskController');
});

Route::group(['domain' => 'bardomain.com'], function () {
    Route::resource('task', 'BarTaskController');    
});

Route::group(['domain' => 'loldomain.com'], function () {
    Route::resource('task', 'LolTaskController');
});
您还可以让这些控制器从一个公共父级
Controller
类继承,任何共享逻辑都可以从该类继承

<?php

namespace App\Http\Controllers;

class FooTaskController extends TaskController
(等等……)

您的视图也可以按域组织:

\app
\bootstrap
\resources
    \assets
    \lang
    \views
        \foo
            task.blade.php
            home.blade.php
        \bar
            task.blade.php
            home.blade.php
        \lol
            task.blade.php
            home.blade.php

您可以将控制器分组到其域实现不同的组中。您还可以共享公共控制器:

// Common route
Route::get('about', 'ContentController@about');

// Diverge by domain
Route::group(['domain' => 'foodomain.com'], function () {
    Route::resource('task', 'FooTaskController');
});

Route::group(['domain' => 'bardomain.com'], function () {
    Route::resource('task', 'BarTaskController');    
});

Route::group(['domain' => 'loldomain.com'], function () {
    Route::resource('task', 'LolTaskController');
});
您还可以让这些控制器从一个公共父级
Controller
类继承,任何共享逻辑都可以从该类继承

<?php

namespace App\Http\Controllers;

class FooTaskController extends TaskController
(等等……)

您的视图也可以按域组织:

\app
\bootstrap
\resources
    \assets
    \lang
    \views
        \foo
            task.blade.php
            home.blade.php
        \bar
            task.blade.php
            home.blade.php
        \lol
            task.blade.php
            home.blade.php

我已经更新了下面的答案,可以在一个应用程序中使用。作为旁注,不需要编写自定义中间件来将域提取到请求中,它已经可以作为:
Request::server('HTTP_HOST')
我已经更新了下面的答案,以便在一个应用程序中工作。作为旁注,不需要编写自定义中间件来将域提取到请求中,它已经作为:
Request::server('HTTP_HOST')