按名称而不是 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'));
});