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

时间:2017-04-13 22:40:07

标签: php laravel-5 routing

我有一个需要为多个域提供服务的Laravel应用程序,例如firstdomain.com,seconddomain.com,thirddomain.com。无论域名如何,逻辑层都保持不变,但演示文稿会发生变化。因此,我想为每个域调用一组不同的控制器。我怎么能这样做?

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

1 个答案:

答案 0 :(得分:2)

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

// 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

(...)

class BarTaskController 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