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

问题描述:

我在Laravel 5.5中构建了一个新的应用程序,它将严重依赖其子域名。如何将子域名有效地传递到Laravel的控制器和视图中

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

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

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

目前,我的路由是这样的:

Route::domain('{sub}.something.com')->group(function() { 
Route::prefix('admin')->group(function ($sub) { 
    Route::get('/', '[email protected]')->name('admin.route1'); 
    Route::get('/route2', '[email protected]')->name('admin.route2'); 
    Route::post('/', '[email protected]')->name('admin.route3'); 
/snip 

可是这样一来,我需要定义每个控制器的方法

public function method($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) }} 

我明白,如果我真的需要将$子变量传递的意见和控制器,但我真的喜欢使用的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到我的视图编辑器,以便能够将其定义为:

$this->subdomain = $sub_from_somewhere 

或者我在做这个错误?我无法找到更有效的方式来构建其中具有子域逻辑的应用程序。

非常感谢。

您可以使用帮助函数request(),它可以访问所有当前的请求参数。你的情况,你可以访问一样,在刀片“分”值:

{{request("sub")}} 

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

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

可以在控制器使用或传递给意见。