我想在Laravel 5.3 app中的所有经过身份验证的URI中设置前缀。如果我使用Route::group(['prefix' => {username}])
,那么如何在web.php
文件中获取用户名。
答案 0 :(得分:1)
假设你已经定义了这样的路线:
Route::group(['prefix' => '/{user}'], function() {
Route::get('/profile', 'UserController@showProfile')->name('user.profile');
});
您可以使用Laravel的route-model binding
将User
个实例直接传递到您的路线中:
<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}}