我已经在我的应用上设置了子域路由(使用Laravel 5.4),并使用以下web.php
路由:
Route::domain('{company}.myapp.localhost')->group(function () {
// Locations
Route::resource('/locations' , 'LocationController');
// Services
Route::resource('/services' , 'ServiceController');
});
但是,由于我的show
和edit
个端点需要传递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);
}
哪个好,但我想知道我是否可以将其作为中间件或其他东西传递给路线。什么是最好的解决方案?
答案 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生成器的全局默认参数中。