如何有效地将子域名传递给Laravel中的控制器和视图

时间:2017-09-10 16:28:21

标签: laravel controller subdomain

我正在Laravel 5.5中构建一个新的应用程序,它将严重依赖于它的子域名。

我已成功为子域路由设置路由组,但最终我需要为每个控制器和每个视图提供子域名变量。

我已经有了一个自定义的View Composer,我将会话变量传递给每个视图。如何为View Composer提供子域名?我不认为我可以通过Request对象访问子域。

此外,是否可以将子域名传递给每个控制器及其方法,而无需在每个方法中指定参数?

目前,我的路由如下:

Route::domain('{sub}.something.com')->group(function () {
Route::prefix('admin')->group(function ($sub) {
    Route::get('/', 'AdminController@methodroute1')->name('admin.route1');
    Route::get('/route2', 'AdminController@methodroute2')->name('admin.route2');
    Route::post('/', 'AdminController@methodroute3')->name('admin.route3');
/snip

但是这样,我需要将每个控制器方法定义为

public function method($sub){}

更糟糕的是,调用每个命名路由并将$ sub参数传递给每个视图:

public function method($sub){
    if(Sentinel::check()){
        return redirect()->route('admin.route1',$sub);
    } else {
        return view('admin.route2')->with('sub',$sub);
    }
}

并在视图中:

{{ route('admin.route1',$sub) }}

我理解我是否真的需要将$ sub变量传递给视图和控制器,但我更喜欢使用View Composer自动化它:

public function __construct()
{
    $this->user = session('user');
    $this->userdata = session('userdata');
    $this->permissions = session('permissions');
}


public function compose(View $view)
{
    $view->with(['user' => $this->user, 'userdata' => $this->userdata, 'permissions' => $this->permissions]);
}

那么如何让$ sub进入我的View Composer才能将其定义为:

$this->subdomain = $sub_from_somewhere

或者我做错了吗?我找不到更有效的方法来构建具有子域逻辑的应用程序。

非常感谢。

2 个答案:

答案 0 :(得分:0)

您可以使用帮助函数request()来访问所有当前请求参数。在您的情况下,您可以访问" sub"刀片中的值如下:

{{request("sub")}}

答案 1 :(得分:0)

这是一个简单的解决方案:

Route::current()->parameter('sub')

您可以在Controller中使用它或传递给视图。