按名称而不是 ID 显示用户个人资料 url
Display user profile url by name instead of ID
我是新手。我正在尝试 return 查看会员资料
目前,可以通过其 ID 访问用户个人资料,就像这样
profile/7
我想通过我创建的名称访问它
profile/John
这是我的路线
Route::get('profile/{id}', 'ProfilController@tampilkanID');
这是我的控制器
public function tampilkanID($id)
{
$auth = Auth::user()->id;
$users=\App\users::all()->whereNotIn('id',$auth);
$tampilkan = Users::find($id);
return view('tampilkan', compact('tampilkan', 'users'));
}
这就是我在 blade
中的称呼
@foreach($users as $user)
<tr>
<td><a id="teamname" href="{{ url('profile',$user->id) }}" target="_blank">{{$user->name}}</a></td>
</tr>
@endforeach
谢谢
试试这个:
路线:
Route::any('profile/{name}', 'ProfilController@index')->name('profile.index');
控制器:
public function index(Request $request, $name)
{
$user = User::where('name', $name)->first();
if(isset($user))
return view('tampilkan', ['user' => $user]);
return "user not found!";
}
Blade:
@foreach($users as $user)
<tr>
<td><a id="teamname" href="{{ route('profile.index',['name' => $user->name]) }}" target="_blank">{{$user->name}}</a></td>
</tr>
@endforeach
建议:
如果你这样做,你还应该在 users
table 中将 "name" 列设置为 "unique",以便每次只获得一个用户,而不是将用户相互混淆.
您可以使用 laravel Route Model Binding
.
什么是路由模型绑定?
Laravel 中的路由模型绑定提供了一种将模型实例注入路由的机制。
如何使用?
通过 object rather then id
喜欢
Route::get('users/{user}', function ($user) {
return view('user.show', compact('user'));
});
在你的User.php
中定义getRouteKeyName
然后return任何你想要的路线
public function getRouteKeyName()
{
return 'name'; //this will return user name as route
}
所以你的路线是users/name
有关详细信息,请查看 laravel 文档 https://laravel.com/docs/5.5/routing#route-model-binding
只需自定义您的 RouteServiceProvider,如下所示:
public function boot()
{
parent::boot();
Route::bind('user', function ($value) {
return App\User::where('name', $value)->first() ?? abort(404);
});
}
或
在模型中自定义您的路由键。
例如:
/**
* Get the route key for the model.
*
* @return string
*/
public function getRouteKeyName()
{
return 'name';
}
路线:
Route::get('users/{user}', function ($user) {
return view('user.show', compact('user'));
});
我是新手。我正在尝试 return 查看会员资料
目前,可以通过其 ID 访问用户个人资料,就像这样
profile/7
我想通过我创建的名称访问它
profile/John
这是我的路线
Route::get('profile/{id}', 'ProfilController@tampilkanID');
这是我的控制器
public function tampilkanID($id)
{
$auth = Auth::user()->id;
$users=\App\users::all()->whereNotIn('id',$auth);
$tampilkan = Users::find($id);
return view('tampilkan', compact('tampilkan', 'users'));
}
这就是我在 blade
中的称呼 @foreach($users as $user)
<tr>
<td><a id="teamname" href="{{ url('profile',$user->id) }}" target="_blank">{{$user->name}}</a></td>
</tr>
@endforeach
谢谢
试试这个:
路线:
Route::any('profile/{name}', 'ProfilController@index')->name('profile.index');
控制器:
public function index(Request $request, $name)
{
$user = User::where('name', $name)->first();
if(isset($user))
return view('tampilkan', ['user' => $user]);
return "user not found!";
}
Blade:
@foreach($users as $user)
<tr>
<td><a id="teamname" href="{{ route('profile.index',['name' => $user->name]) }}" target="_blank">{{$user->name}}</a></td>
</tr>
@endforeach
建议:
如果你这样做,你还应该在 users
table 中将 "name" 列设置为 "unique",以便每次只获得一个用户,而不是将用户相互混淆.
您可以使用 laravel Route Model Binding
.
什么是路由模型绑定?
Laravel 中的路由模型绑定提供了一种将模型实例注入路由的机制。
如何使用?
通过 object rather then id
喜欢
Route::get('users/{user}', function ($user) {
return view('user.show', compact('user'));
});
在你的User.php
中定义getRouteKeyName
然后return任何你想要的路线
public function getRouteKeyName()
{
return 'name'; //this will return user name as route
}
所以你的路线是users/name
有关详细信息,请查看 laravel 文档 https://laravel.com/docs/5.5/routing#route-model-binding
只需自定义您的 RouteServiceProvider,如下所示:
public function boot()
{
parent::boot();
Route::bind('user', function ($value) {
return App\User::where('name', $value)->first() ?? abort(404);
});
}
或
在模型中自定义您的路由键。
例如:
/**
* Get the route key for the model.
*
* @return string
*/
public function getRouteKeyName()
{
return 'name';
}
路线:
Route::get('users/{user}', function ($user) {
return view('user.show', compact('user'));
});