Laravel子域路由为route()帮助器设置全局para

时间:2017-08-17 09:27:37

标签: laravel laravel-5 wildcard-subdomain

我已经在我的应用上设置了子域路由(使用Laravel 5.4),并使用以下web.php路由:

Route::domain('{company}.myapp.localhost')->group(function () {
  // Locations
  Route::resource('/locations' , 'LocationController');

  // Services
  Route::resource('/services' , 'ServiceController');
});

但是,由于我的showedit个端点需要传递ID,因此使用普通route('services.show')帮助程序会导致ErrorException说明Missing required parameters for [Route: services.create] [URI: services/create].

我很感激这是必要的,但由于company在登录时与用户相关联(并且在子域中),我不希望为每个视图传递此信息。我想在全球范围内设置它。

为避免重复查询,我考虑将其存储在会话中(在:

中)
protected function authenticated(Request $request, $user)
{
    $current_company = $user->companies->first();
    $company         = [
        'id'           => $current_company->id,
        'name'         => $current_company->name,
        'display_name' => $current_company->display_name
    ];
    $request->session()->put('company', $company);
}

哪个好,但我想知道我是否可以将其作为中间件或其他东西传递给路线。什么是最好的解决方案?

2 个答案:

答案 0 :(得分:0)

建议:删除资源名称前的斜杠 resource方法将生成以下URI:

/services/{service}

所以,你应该像这样定义你的路线:

Route::domain('{company}.myapp.localhost')->group(function () {
    // Locations
    Route::resource('locations' , 'LocationController');

    // Services
    Route::resource('services' , 'ServiceController', ['only' => ['index', 'store']]);
    Route::get('services');
});

答案 1 :(得分:0)

今天我碰到了这个确切的问题,我在源代码中四处摸索,在url生成器上发现了一个defaults方法,该方法可让您设置全局默认路由参数,如下所示:

app('url')->defaults(['yourGlobalRouteParameter' => $value]);

这将以您指定的任何值合并到用于路由URL生成器的全局默认参数中。