将auth :: user作为带有路由的数据变量传递

时间:2016-03-21 20:43:01

标签: php laravel url routes

我希望当用户点击个人资料页面时,我想将Auth::user()->username作为参数传递给我的userController的show方法。我的个人资料链接如下:

<li><a href="{{URL::to('/profile')}}">Profile</a></li>

在我的路线中,我有以下路线

Route::get('/profile/{username}',function(){
     return View::make('user.show')->with($username);
});

我的问题是,当我点击个人资料链接时,我可以在username中将'/profile/{username}'设置为Auth::user()->username?目前,个人资料链接不会附加任何参数

4 个答案:

答案 0 :(得分:2)

首先 {{URL::to('/profile')}}未指向Route::get('/profile/{username})网址,有两条不同的路由

所以你需要做的就是改变链接,即

{{URL::to('/profile/' . \Auth::user()->username)}}

然后在您的路线文件中

Route::get('/profile/{username}',function($username){
    return View::make('user.show')->with(['username' => $username]);
});

//请注意,您需要使用with()方法传递数组 或者你可以这样做

Route::get('/profile/{username}',function($username){
    return View::make('user.show',compact('username'));
});

答案 1 :(得分:1)

当用户点击个人资料链接时:

<li>
  <a href="{!! route('user.show', Auth::user()->username) !!}">My Profile</a>
</li>

调用UserController @ show方法。

<?php

// routes.php

Route::get('profile/{username}', 'UserController@show')->name('user.show');

// UserController.php

public function show($username)
{
    $user = User::whereUsername($username)->first();

    return view('user.show', compact('user'));
}

并将View响应返回给用户。

@Update

如果您需要将控件重定向到UserController @ show方法,则可以执行以下操作:

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

<?php

// routes.php

Route::get('profile/{username}', function ($username) {
    return redirect()->route('user.show', Auth::id());
})->name('user.profile');

现在,如果你想自定义UserController @ show action:

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

调用UserController @ show方法。

<?php

// routes.php

Route::resource('user', 'UserController', ['except' => ['show']);
Route::get('profile/{username}', 'UserController@profile')->name('user.profile');

现在您可以删除UserController @ show方法(如果需要)或更改要显示的配置文件方法名称。

// UserController.php

public function profile($username)
{
    $user = User::whereUsername($username)->first();

    return view('user.show', compact('user'));
}

答案 2 :(得分:0)

快速方法是从/ profile设置重定向,如果他们想要查看其他人的个人资料,就不会破坏该功能。

Route::get('/profile',function(){
    return Redirect::to('/profile/'.Auth::user()->username);
}

但是,我建议在重定向之前执行Auth :: check()。

答案 3 :(得分:0)

我做了类似下面的事情

<li><a href="{{URL::to('/profile')}}">Profile</a></li>

并在route.php中:

Route::get('/profile',function(){
        return redirect()->route('user.show',[Auth::user()->username]);

    });