Laravel blade 中的资源匹配

Laravel resource match in blade

我已经使用 laravel(5.8) 资源路由构建了一个典型的 crud 系统。

Route::resource('users', 'UserController');

我正在尝试匹配该资源的任何方法以使 link 显示在菜单中处于活动状态:

  <li class="nav-item 
      @if(Request::route()->getName() == 'users.index' 
        || Request::route()->getName() == 'users.create'
        || Request::route()->getName() == 'users.show'
        || Request::route()->getName() == 'users.*.edit') 
       active
      @endif">
       <a href="#">Users</a>
  </li>

有明确的解决方案吗?

您可以使用以下方法来实现。

<li class="nav-item {{ str_is('users.*', Route::currentRouteName()) ? 'active' : '' }}>
  <a href="#">Users</a>
</li>

这使用 str_is() laravel 助手来查看字符串是否包含 users.。这是针对当前路由名称的检查。

如果为真,则输出 active,如果为假,则不输出任何内容。

注意: 在 Laravel 5.8 中,字符串和数组助手已默认删除。您的代码需要使用 Str 门面。

<li class="nav-item {{ \Str::is('users.*', Route::currentRouteName()) ? 'active' : '' }}>
  <a href="#">Users</a>
</li>

我在 laravel 中找到的多个路线的最佳方法是这个 这样它将匹配所有路由,如 roles.index roles.create roles.* 和 users.*

class="{{ str_contains(Route::currentRouteName(), ['roles','users']) ? 'active' : '' }}"