咨询:视图中使用的Route::currentRouteNameStartWith()在控制器中何处调用?
问题解决思路
首先明确:Laravel原生根本没有Route::currentRouteNameStartWith()这个方法,所以你找不到它的定义是正常的。下面给你两种直接能用的解决办法:
方法一:用原生方法直接替代
不用自定义任何东西,直接修改视图代码,用Str::startsWith配合Route::currentRouteName()实现相同逻辑:
<li class="{{ Str::startsWith(Route::currentRouteName(), 'overview') ? 'mm-active': ''}}"> <a href="{{ route('overview')}}">@lang('Overview')</a> </li>
要是调用Str时报错,要么在视图顶部加@use Illuminate\Support\Str,要么直接写完整命名空间\Illuminate\Support\Str::startsWith()。
方法二:自定义Route宏(适合需要复用的场景)
如果你就想保留currentRouteNameStartWith这种写法,去App\Providers\RouteServiceProvider的boot方法里添加一段宏定义:
use Illuminate\Support\Facades\Route; use Illuminate\Support\Str; public function boot() { parent::boot(); Route::macro('currentRouteNameStartWith', function ($prefix) { $currentRoute = Route::currentRouteName(); return $currentRoute && Str::startsWith($currentRoute, $prefix); }); }
写完之后,原来视图里的代码就能正常使用了。
额外排查点
如果之前这个方法确实能正常运行,那大概率是之前的开发者自定义了宏或者扩展了Route类,你可以去App\Providers目录下的服务提供者文件,或者项目里的自定义扩展文件里找找看。
内容的提问来源于stack exchange,提问作者Miracle
相关产品推荐
相关产品推荐

