我在这里要实现的是将用户名设置为myapp.com/username
。我可以这样做:
/*
* Other route logic, containing static-url pages, such as
* myapp.com/login so that it overrides any usernames
*/
Route::get('/{username}', function($username) {
return $username . "'s profile.";
});
但是,我还希望按照相同的规则包含公司页面。例如,myapp.com/janes-bakery
。但我似乎无法实现这一点,因为如果遇到没有返回的路线,Laravel会自动停止搜索路线。相反,它只会抛出404页面。
我确实认为我可以使用类似的东西:
Route::get('/{slug}', ['as' => 'profile', function($slug) {
$company = \App\Models\Company::where('slug', '=', $slug)->get();
if($company->count() > 0) {
return "Company found.";
}
$user = \App\User::where('username', '=', $slug)->get();
if($user->count() > 0) {
return "User found.";
}
abort(404);
}]);
哪种方法很好,但我觉得这很糟糕。除此之外,我无法根据公司/用户访问后缀路由。例如myapp.com/jane/friends
或myapp.com/janes-bakery/services
。
有人对如何解决这个问题有任何建议吗?我发现很难想出任何解决方案。提前谢谢!
P.S。重要的是URL没有相关性,例如没有myapp.com/company/user
(反之亦然),myapp.com/company_name_here
和myapp.com/users_name_here
是两个完全不同的东西。
答案 0 :(得分:0)
您可以坚持自己的路线,并使用company/user
模式制作另一条路线。你可以这样做。
使用company和user参数创建另一条路径。
Route::get('{company}/{user}', function($company, $user){
dd($company, $user);
});
并且您需要将此路线放在您的个人资料路线之上,因为在laravel中,第一条路线将在其他路线下方之前处理。