Laravel 5 - 确定路由是否属于用户

时间:2015-04-12 02:04:44

标签: php laravel laravel-5 laravel-routing

我在这里要实现的是将用户名设置为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/friendsmyapp.com/janes-bakery/services

有人对如何解决这个问题有任何建议吗?我发现很难想出任何解决方案。提前谢谢!

P.S。重要的是URL没有相关性,例如没有myapp.com/company/user(反之亦然),myapp.com/company_name_heremyapp.com/users_name_here是两个完全不同的东西。

1 个答案:

答案 0 :(得分:0)

您可以坚持自己的路线,并使用company/user模式制作另一条路线。你可以这样做。

使用company和user参数创建另一条路径。

Route::get('{company}/{user}', function($company, $user){
  dd($company, $user);
});

并且您需要将此路线放在您的个人资料路线之上,因为在laravel中,第一条路线将在其他路线下方之前处理。