如何在视图中使用命名路由,其中​​命名路由具有通配符

时间:2015-05-18 11:59:44

标签: php routes laravel-5 blade

我是这样的团体路线

Route::group(['prefix' => 'admin/{username}'],function()
{
    Route::get('', ['as' => 'dashboard', 'uses' => 'AdminController@index']);

    Route::get('settings', ['as' => 'settings', 'uses' => 'AdminController@settings']);
});

在我看来,我使用命名路由作为链接参考,如此

<li><a href="{{ route( 'settings' ) }}"><span>Settings</span></a></li>

但它呈现为

<li><a href="http://localhost:8000/admin/%7Busername%7D/settings"><span>Settings</span></a></li>

用户名按字面打印,但不是实际值。我真正想要的是这个

<li><a href="http://localhost:8000/admin/john/settings"><span>Settings</span></a></li>

怎么做?

4 个答案:

答案 0 :(得分:2)

生成URL时必须传递路由参数。像:

{{ route('settings', ['john']) }}

显然你宁愿做类似的事情:

{{ route('settings', [$user->name]) }}

由于您只有一个参数,因此您甚至不必将其作为数组传递:

{{ route('settings', $user->name) }}

答案 1 :(得分:2)

你应该试试......

<li><a href="{{ route( 'settings', Auth::user()->username ) }}"><span>Settings</span></a></li>

您必须将当前用户名作为第二个参数传递。

答案 2 :(得分:1)

因此,如果您的用户名为大写字母,那么地址看起来会更好,您可以使用strtolower()

<li><a href="{{ route( 'settings', strtolower(Auth::user()->username) ) }}"><span>Settings</span></a></li>

<强>注意

Auth::user()适用于当前用户。如果没有人登录,则会出错! 所以你可以检查一下。

@if(Auth::user())
    <li><a href="{{ route( 'settings', strtolower(Auth::user()->username) ) }}"><span>Settings</span></a></li>
@endif

答案 3 :(得分:0)

另一种方法是将通配符传递给控制器​​进行查看,并将其作为第二个参数在路径中使用

首先在控制器中传递通配符

public function index($username)
{
    return view('admin.dashboard', compact('username'));
}

并在视图中将路径中的变量作为第二个参数

传递
<li><a href="{{ route( 'settings', $username) }}"><span>Settings</span></a></li>