按名称而不是ID

时间:2017-12-04 05:03:58

标签: php laravel laravel-5 laravel-5.3 backend

我是新手。我正在尝试返回会员资料的视图

目前,用户个人资料可通过 ID 访问,如此

  

简档/ 7

我想通过我创建的名称来访问它

  

简档/约翰

这是我的路线

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')); 
}

这就是我在刀片中的称呼方式

 @foreach($users as $user)
           <tr>
               <td><a id="teamname" href="{{ url('profile',$user->id) }}" target="_blank">{{$user->name}}</a></td>
              </tr>
 @endforeach

谢谢

3 个答案:

答案 0 :(得分:2)

试试这个:

路线:

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!"; 
}

刀片:

@foreach($users as $user)
    <tr>
        <td><a id="teamname" href="{{ route('profile.index',['name' => $user->name]) }}" target="_blank">{{$user->name}}</a></td>
    </tr>
 @endforeach  

<强>建议:
如果你这样做,你还应该设置&#34; name&#34;列到&#34;唯一&#34;在users表中,以便每次只获得一个用户,而不是将用户彼此混淆。

答案 1 :(得分:0)

您可以使用laravel Route Model Binding

什么是路线模型Binging?

Laravel中的路径模型绑定提供了一种将模型实例注入路径的机制。

我该如何使用?

传递object rather then id,如

Route::get('users/{user}', function ($user) {
    return view('user.show', compact('user'));
});

User.php定义getRouteKeyName中,然后返回您想要的任何路线

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

答案 2 :(得分:0)

只需自定义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'));
});