如何在命名路由有通配符的情况下使用命名路由

Posted

技术标签:

【中文标题】如何在命名路由有通配符的情况下使用命名路由【英文标题】:how to use named routes in view where named routes have wildcard 【发布时间】:2015-07-29 22:13:09 【问题描述】:

我有一组这样的路线

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>

如何做到这一点?

【问题讨论】:

只需提供用户名作为第二个参数就可以了,检查答案。 【参考方案1】:

您应该尝试关注...

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

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

【讨论】:

【参考方案2】:

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

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

显然你宁愿做这样的事情:

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

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

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

【讨论】:

【参考方案3】:

因此地址看起来更好,如果您的用户名带有大写字母,您可以使用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

【讨论】:

【参考方案4】:

另一种方法是通过控制器传递通配符以查看并在路由中使用它作为第二个参数

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

public function index($username)

    return view('admin.dashboard', compact('username'));

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

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

【讨论】:

以上是关于如何在命名路由有通配符的情况下使用命名路由的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动的BottomNavigationBar中使用命名路由?

Laravel:如何通过javascript加载带有动态参数的命名路由

如何避免Rails 5嵌套资源命名空间路由中的双下划线

laravel如何使用命名路由

如何将非字符串数据传递给 Flutter 中的命名路由?

AngularJS UI 路由器:如何配置嵌套命名视图?