在URI Laravel中将username设置为前缀

时间:2017-06-01 11:45:15

标签: laravel laravel-5 laravel-5.3

我想在Laravel 5.3 app中的所有经过身份验证的URI中设置前缀。如果我使用Route::group(['prefix' => {username}]),那么如何在web.php文件中获取用户名。

2 个答案:

答案 0 :(得分:1)

假设你已经定义了这样的路线:

Route::group(['prefix' => '/{user}'], function() {
    Route::get('/profile', 'UserController@showProfile')->name('user.profile');
});

您可以使用Laravel的route-model bindingUser个实例直接传递到您的路线中:

<a href="{{ route('user.profile', \Auth::user()->username) }}">View Profile</a>

然后在controller中,您可以轻松获取该模型实例:

class UserController extends Controller
{
     public function showProfile(User $user)
    {
        return view('user.profile.index', compact('user'));
    }
}

查看文档here.

编辑:默认情况下,Laravel在检索给定的模型类时使用id列。您可以通过覆盖username模型上的getRouteKeyName()方法轻松将其更改为User案例中的任意列。

public function getRouteKeyName()
{
    return 'username';
}

答案 1 :(得分:0)

你不能和你不应该使用用户名硬核路由。如果您有100个用户,您是否计划为每个用户创建100个路由组?假设每个用户有2条路线,即200条路线。

您需要做的是生成包含用户名段的路由,并根据用户名动态检测用户。

http://example.app/{username}/profile
http://example.app/{username}/setting

生成的路线就像

adam

因此,用户名为http://example.app/adam/profile http://example.app/adam/setting 的用户可以获取链接。

Route::get('{username}/profile', function ($username) {
    return 'Username is '.$username;
});

同样,您可以为所有用户提供基于用户名的链接,您需要使用路径模型绑定或标准方式在控制器中检测它们。

修改

对于基于闭包的路线,您可以像这样获取网址段

public function profile($username)
{
    return $username;
}

使用控制器,您可以将它们作为参数。

{{1}}