用户的Laravel通配符子域

时间:2017-03-02 07:48:44

标签: php laravel laravel-5

我希望在我的平台上实现whitelabel解决方案,并且需要为系统或系统实现通配符子域,唯一的问题是我们的系统是自己的子域。所以我需要过滤掉任何特定子域的内容。

// *.website.co.uk
Route::group(['domain' => '{element}.website.co.uk'], function() {
    Route::get('/', function ($element) {
        dd($element);
    });
});

// my.website.co.uk
Route::get('/', 'PagesController@getLogin');
Route::post('/', 'PagesController@postLogin');

但是使用上面的代码我得到错误:

  

未定义的变量:element

我如何避免此错误?

1 个答案:

答案 0 :(得分:2)

一个好方法是排除我的'使用模式。将此代码放在路径文件的顶部:

Route::pattern('element', '(?!^my$)');

或者,可以进入RouteSericeProvider的boot()部分。为了给您一个可行的解决方案,您的代码将变为以下内容(您可以稍后整理!)

Route::pattern('element', '(?!^my$)');

Route::group(['domain' => '{element}.website.co.uk'], function() {
    Route::get('/', 'PagesController@getLogin');
    Route::post('/', 'PagesController@postLogin');
});

另一种方法是匹配我的'匹配{element}路由之前的路由。然而,虽然许多人这样做,但我认为如果在评论中没有清楚地解释路线的排序可能会更难维持。