【问题标题】:Laravel 5 - Determine if route belongs to userLaravel 5 - 确定路线是否属于用户
【发布时间】:2015-04-12 02:04:44
【问题描述】:

我希望在这里实现的是将用户名设置为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

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

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

【问题讨论】:

    标签: php laravel laravel-5 laravel-routing


    【解决方案1】:

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

    使用公司和用户参数创建另一条路线。

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

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

    【讨论】:

    • 感谢您的建议,但这不是我想要的答案。我不想将公司与用户联系起来。然而,我想要的是分开蛞蝓
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    相关资源
    最近更新 更多